perm filename CKLZ.MAC[1,ALS]1 blob sn#515081 filedate 1980-06-10 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00045 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00009 00002		TITLE	CKL   CHECKERS LEARNING ROUTINES  12/8/70
C00013 00003	MA MP MK ME MWL BEST X1S X2S SAVX2 U2SS WHOWON WINLOS BKMOVE X4CNT X4MOVE HIGH LOW EQUAL THIGH TLOW TEQUAL HEADFL U4S KEAR BOLFLG LXF TRNKNO LBYT LFLAG CMOVE COUNT LPOINT STIME LTIME LTIME0 RTIME TIME HEADER
C00016 00004	DSTREE TREFIX BK MOVOUT IP IK CDIFF TEST CRFST LPTREE CRUNT CTELLC TELPAR SIG SETW SETPAR SETB FIND MOVIN PLAY PLAYBS PC PB GO DEBUG REVERS PW CTOTAL W D SUM RECIN EXIT1 IA FINDM DIFF TOTAL FSTCR RUNT CSFLAG TRESET TREE MOP TELLC MOVX LTREE MESS
C00018 00005	TAB1E SIGZ11 SIGZ12 SIGZ13 SIGZ14 SIGZ15 SIGZ16 HIGH11 HIGH12 HIGH13 HIGH14 HIGH15 HIGH16 EQU11 EQU12 EQU13 EQU14 EQU15 EQU16 LOW11 LOW12 LOW13 LOW14 LOW15 LOW16 TAB1P TAB1P1
C00021 00006	LOADTA BEGINL SSD SSD1 SSD2 SSD3 BEGL2 BEGL4
C00026 00007	BEGLB BEGLK BEGLL BEGL3 GETGO LB1 COMM2 COMM COMM3 COMM1
C00030 00008	LFSTRT BEGIN3 BEGIN2 BEGIN4 LTR LTR1 LTR2 UPTAB UPTAB2
C00034 00009	TTYUU LCONTS LCONTZ LLSTOP LSTOP LCONT LMOVE UPDTSC LMOVE1 LMOVE2
C00040 00010	NOGOOD BSTMOV NONONO KEAR. KEAR.0 KEAR.2 KEAR.3 LA1 BDSTOR LA4 LA4A LA4B
C00044 00011	LA4JJ LA4J DSKINI DSKER DATAG EB EB2 EBA EBA2
C00047 00012	ALS1 ALS1B ALS1A ALS2 ALS3
C00051 00013	ALS3J ALS3A ALS3B ALS4 ALS5 ALS6 ALS7 ALS8
C00053 00014	LDEF LDEFA FORGIV LOC LOC1 XCODE XCODE0 LA2 BM LA3
C00060 00015	BBRNCH KBRNCH KBRNC2 KBRNC3 KBRNC4 KBRNC5 KBRNC6 LBRNCH LUL LUPE LDO LHERE
C00066 00016	NOMOV NOMOVE ENDERR LERR MAGOU2 MAGOU3 NOSTO STOP STOMP STTEST STBIT
C00070 00017	LINEAR L1 L2 L3 L4 L5 L5A L7 L8 L9 L9A L10 L10A L10B L10C L12 L13 L14 L14N
C00077 00018	L21A L21 L22 L22A AC ACZ AC1 AC3 AC3A AC2 L25B L25BN L25C
C00081 00019	TRJOUT L31 L32 L34 L34Z L34A L34B L34C L35 L33 L35B L35BN
C00084 00020	C2P C3P C4P C5 C2N C3N C4N C6
C00086 00021	CORCOM CORADD WEIGH1 WEIGH2 WEIGH3 WEIGHT LMSKW LRNPDL
C00087 00022	LRJOUT LZ RJOUT1 RJOUT2 RJ2A RJOUT3 LDEPTH KDEPTH LFLAG1 LFLAGZ LFLAG2 LFLAG3 LFLAG5 LFLAG6 LFLAG7 LFLAG8 LFLAG9 TRUNKF SMOOTH SMFAZE PRNVAR DORM DSKTAP TRMA TRMB TRMC TABA TABB TABC
C00090 00023	TOTALS TOTAL2 SYM SYM0 SYM1 SYM2 SYM3 SYM4 SYM5 SYM6 SYM10 SYMPDL
C00093 00024	FACTOR FACTO2 FACTO3 DIVIDE DIVMSK DIVIDT
C00096 00025	LZERO ZL LC LC2 LC3 LC3A LC4 LC5 LC6 LC6A LC7 LC10 LC20
C00101 00026	LC7SAV LC7SAE LASCIZ TTNMVS TTNBDS TNOBDS TNOMVS
C00102 00027	EVA LEV1 CFC CFA1 CFA3 PHASAD PHASES NEG
C00106 00028	DSAVE RSAVE
C00107 00029	DFILL DFILL2 DSKERR DATA RDATA
C00108 00030	MTAOUT SIGDAT SIGT0 SIGT1 SIGT2 SIGT3 CFZ1 CFZ2 CFZ3 CFZ4 CFZ5 CFZ10 CFZ11 CEMPTY LABEL EVAL11 SIGT11 EVAL12 SIGT12 EVAL13 SIGT13 EVAL14 SIGT14 EVAL15 SIGT15 EVAL16 SIGT16 EVAL21 SIGT21 EVAL22 SIGT22 EVALF SIGTF LABELD LRN11 SIGL11 LRN12 SIGL12 LRN13 SIGL13 LRN14 SIGL14 LRN15 SIGL15 LRN16 SIGL16 LRN21 SIGL21 LRN22 SIGL22 LRNF SIGLF
C00112 00031	BLOWUP INPSIZ BOKSIZ INPMAX INPCNT INPKNK SAVMOV SAVM0 SAVM1 SAVMZ PADMOV PADMO2 INDEXS INDEXX INDEXA INDEXP INDEXK INDEXF INDEXC INDEXL INDEXV INDXV2 SIXADD SIXPT2 SIXPT3 SIXPNT SIXOUT
C00120 00032	MERGE MER0 MER1 MER2 MER3 MER4 MER5 MER6 MER7 MER8 PLACE BINDEX
C00125 00033	INSERT INS1 INS1A INS1B INS1C INS2 INS3 INSL INSL1 INSG INSG1 INSG2 OUTBLK OUTBA OUTBP OUTBM OUTBK
C00134 00034	INSZ INSZZ WHERIN WHRINS GETFIL GETFIA GETFIR
C00138 00035	DMPFIL DSKBKD DSKBKM BKMIN BKMIN2 INPA INPP INPM INPK BOOKA BOOKP BOOKK BOOKM BOOKI BOOKMS FILEIN FILEI2 FILEI3 INBITS
C00144 00036	BOLAND BOL1 BOL2 BOL3 BOL4 X4VAR BDIN BDIN0 BDIN1 BDIN2 BDIN3 BDIN4
C00147 00037	FIXX NOFIND FIXK FIXK2
C00150 00038	RPMOVE FIX1 FIX6 FIX7 FIX8 FIX11 FIX10 FIX13
C00154 00039	FIX12 FIXOK FIXZ ACCEPT ACC ACC1 ACC2 ACC3
C00157 00040	SM SM1 SM3 SM4 SM5 SM5A SM6 SM6A SM20 SM21 SM22 SM23 SM24 SM25 SM25A SM26 SM26A SM30 SM31 SM32 SM33 SM35 SM35A SM36 SM36A
C00164 00041	SGT5 SGT5A SGT5B SGT5C SGT3 SGT3A SGTOT NUM4 NUM1 XPAR TABFIX TABFI2 TABFI3 TABFIZ TBCHAN TBFILE PAR TABLST TAB1 TABLS2 TAB2 TAB3 TAB3A TAB3B TAB3C TAB4 TAB4A TAB4B TAB5 TAB5A TAB8 TAB7 TAB6 TAB20 TAB20A TAB20B TAB21 TAB22 TAB23 TAB24 TAB24A TAB25 TAB26 TAB27 TAB31 TAB32 TAB32A TAB33 TAB34
C00177 00042	LEGM LEGM1 INOUT EXBITS FIXIN FIX9K NULL OA OP OK MOVES
C00180 00043	BOUT BOUT0 BOUT1 BOUT2 BOUT3 BORD BORD1 BORD2 NOTHLD PHELD PSPACE PCURN NXTNUM BORD3 NPRINT NHOLD KPRINT CURNUM FIXNUM
C00188 00044	XEROX XEROX1 XEROX2 XER2A XEROX3 XEROX4 XEROX5 XEROX7 XEROX8 XEROXZ VARNUM XXIND XXVAL BTITLE SEETHE BLACK WHITE NOKING WITHKI BHEAD DSKIN5 FRMBU5 DSKER5 DATAG5 TERTXT MTEXT MTEXT1 MTEXT2 VAROUT
C00196 00045	BDOUT AGAIN AGAIN1 BDOUT1 BDOUT2 CRLFCK PPLUS BORDER PSTAR PHYFEN PBM PBK PWM PWK
C00205 ENDMK
C⊗;
	TITLE	CKL   CHECKERS LEARNING ROUTINES  12/8/70
;WITH FIX ROUTINE ADDED

;REVISED TO REDUCE MEMORY AND DISK SIZES

	INTERN	BEGINL,CMOVE,HEADFL,LBYT,LFLAG,NOSTO
	INTERN	LXF,LZERO,TRNKNO,DIVIDE,SYM,LC,INPSIZ
	INTERN	LZER2,LZER3,XEROX
	INTERN	DFILL,RSAVE,DSAVE,EVAL11,LOADTA
	INTERN	WHOWON,LCONTS,LCONTZ,ZL,BEGL3
	INTERN	BOOKA,BOOKP,BOOKK,BOOKM,BOOKI,INPSIZ,INPA,INPP,INPK,LABEL
	INTERN	TABFIX,TABLST,PAR,XPAR,INPCNT
	EXTERN	LPTBUF,NUM2,GETWHR,DNUM
	EXTERN	FINDX1,X4NORM,X4ALL,X4TAB
	EXTERN	CRIP,REVERA,REVERP,REVERK
	EXTERN	COLOR,BITTAB
	EXTERN	LEGAL,MAGIN,MAGOUT,MAGTAP,TPUNIT,OUTIN,MGIBUF,MGOBUF
	EXTERN	NOYES,NUM3,NUMOUT,OCT2,OCTOUT,RJ2,RJ4,RJOUT,SCAN,TYI
	EXTERN	TERPRI,EOL,NEWLIN,PRINT,S,SI
	EXTERN	LOSE,LPTFIX,DWFLAG
	EXTERN	PLA,PLP,PLK,PLRF,PLLF,PLRB,PLLB,PUP,ZZ,PLY
	EXTERN	PRNAME,LPFLAG,BEGIN,COMEND
	EXTERN	TA,TP,TK,TYO,LASCAR,ERR,SIDE,OJ
	EXTERN	USEBOK,TYPE
	INTERN	EV,CFTAB2,INIT1,CFLAG,INDEXX,INDEXF

CFTAB2:	MOVEI	U1,[ASCIZ /CFTAB2 /]
	JRST	ZZZZZZ
INIT1:	MOVEI	U1,[ASCIZ /INIT1 /]
	JRST	ZZZZZZ
TLIST:	MOVEI	U1,[ASCIZ /TLIST /]
	JRST	ZZZZZZ
PCCNT:	MOVEI	U1,[ASCIZ /PCCNT /]
	JRST	ZZZZZZ
KSTART:	MOVEI	U1,[ASCIZ /KSTART /]
ZZZZZZ:	PUSHJ	PDP,PRINT
EV:
PHASEV:	POPJ	PDP,
PHASE:	Z
CFLAG:	Z
	Z
	Z
EEB:	BLOCK	20
	Z
	Z
EEB2:	BLOCK	20
RFU:	Z
LFU:	Z
LBU:	Z
RBU:	Z

;         REGISTER ASSIGNMENTS
;ASSIGNMENT	USAGE
Z=0
X1=1	;	INDEX MAIN
U1=2
X2=3	;	INDEX PATH
U2=4
X3=5	;	INDEX PLAUS
U3=6
X4=7	;	INDEX TWIG
U4=10
X5=11	;	PASS COLOR
U5=12
Q=13
A=14	;	ACTIVE
P=15	;	PASSIVE
K=16	;	KINGS
PDP=17	;	PUSHJ
;MA MP MK ME MWL BEST X1S X2S SAVX2 U2SS WHOWON WINLOS BKMOVE X4CNT X4MOVE HIGH LOW EQUAL THIGH TLOW TEQUAL HEADFL U4S KEAR BOLFLG LXF TRNKNO LBYT LFLAG CMOVE COUNT LPOINT STIME LTIME LTIME0 RTIME TIME HEADER

MA:	BLOCK	300
MP:	BLOCK	300
MK:	BLOCK	300
ME:	BLOCK	300
MWL:	BLOCK	300		;WHOWON INDICATORS

OPDEF	TTYUUO	[51B8]

BEST:	Z		;BEST INDEX VALUE
X1S:	Z
X2S:	Z
SAVX2:	Z
U2SS:	Z
WHOWON:	Z
WINLOS:	Z		;COUNT OF DISTANCE TO WIN OR LOSS
BKMOVE:	Z		;BOOK MOVE SAVE
X4CNT:	Z
X4MOVE:	Z
HIGH:	BLOCK	4
LOW:	BLOCK	4
EQUAL:	BLOCK	4
THIGH:	Z
TLOW:	Z
TEQUAL:	Z
HEADFL:	-1
U4S:	Z			;TEMPORARY STORAGE
KEAR:	Z			;FLAG FOR KEAR LEARNING DATA
BOLFLG:	Z		;FLAG FOR BOLAND LEARNING DATA
LXF:	Z			;FLAG FOR LEGAL BOOK MOVE
TRNKNO:	0			;TRUNK COUNTER
LBYT:	Z			;BYTE POINTER
LFLAG:	Z
CMOVE:	Z
COUNT:	Z
LPOINT:	Z			;POINTER FOR VARIATIONS

STIME:	SETZ	U1,
	CALL	U1,[SIXBIT /RUNTIME/]
	MOVEM	U1,TIME
	POPJ	PDP,

LTIME:	SETZ	U1,
	CALL	U1,[SIXBIT /RUNTIME/]
	SUB	U1,TIME
	ADDM	U1,LABEL
LTIME0:	ADDM	U1,TIME
	MOVEI	U2,↑D1000
	IDIVM	U1,U2
	MOVE	U1,U2
	PUSHJ	PDP,RJOUT1
	POPJ	PDP,

RTIME:	SETZ	U1,
	CALL	U1,[SIXBIT /RUNTIME/]
	SUB	U1,TIME
	JRST	LTIME0

TIME:	Z
HEADER:	ASCIZ /Special symbols-  ' Best move,	= fair only,	% definitely bad move.

Move #	Move	Legal Moves
/
;DSTREE TREFIX BK MOVOUT IP IK CDIFF TEST CRFST LPTREE CRUNT CTELLC TELPAR SIG SETW SETPAR SETB FIND MOVIN PLAY PLAYBS PC PB GO DEBUG REVERS PW CTOTAL W D SUM RECIN EXIT1 IA FINDM DIFF TOTAL FSTCR RUNT CSFLAG TRESET TREE MOP TELLC MOVX LTREE MESS

;THE FOLLOWING DEFINITIONS ARE NEEDED TO DEFINE GLOBELS.
;THIS SECTION TAKES THE PLACE OF PD.MAC

INTERN	TRESET,TREE,TELPAR,SIG,SETW,SETPAR,SETB,FIND,MOVIN
INTERN	ACCEPT,BDOUT,PLAYBS,PC,PB,TELLC,LTREE,GO,DEBUG
INTERN	REVERS,PW,CTOTAL,LEGM,W,D,BOUT,MESS,IA,FINDM
INTERN	CDIFF,DIFF,TOTAL,CRFST,FSTCR,LPTREE,RUNT,CRUNT,CTELLC,CSFLAG
INTERN	MOVOUT,MOVES,IP,IK,TEST,SUM,RECIN
INTERN	MOP,MOVX,EXIT1,DATA
INTERN	DSTREE,TREFIX,BK

	EXTERN	NOTICE
DSTREE:
TREFIX:
BK:
MOVOUT:
IP:
IK:
CDIFF:
TEST:
CRFST:
LPTREE:
CRUNT:
CTELLC:
TELPAR:
SIG:
SETW:
SETPAR:
SETB:
FIND:
MOVIN:
;BDOUT:
PLAY:
PLAYBS:
PC:
PB:
GO:
DEBUG:
REVERS:
PW:
CTOTAL:
W:
D:
SUM:
RECIN:
EXIT1:
	RELEAS	5,
	JRST	NOTICE

IA:
FINDM:
DIFF:
TOTAL:
FSTCR:
RUNT:
CSFLAG:
TRESET:
TREE:
MOP:
TELLC:
MOVX:
LTREE:	Z
MESS:	ASCIZ	/
/
;TAB1E SIGZ11 SIGZ12 SIGZ13 SIGZ14 SIGZ15 SIGZ16 HIGH11 HIGH12 HIGH13 HIGH14 HIGH15 HIGH16 EQU11 EQU12 EQU13 EQU14 EQU15 EQU16 LOW11 LOW12 LOW13 LOW14 LOW15 LOW16 TAB1P TAB1P1

;FIRST LEVEL TABLE EVALUATION MACROS AND DATA


DEFINE	MACZ	(SC)	<;TABLE EVALUATION SCORE
	MOVE	Z,SIGZ1'SC(A)
	CAMN	K,A
	JRST	.+7		;DO NOT SCORE BOOK MOVE
	CAMGE	Z,SIGZ1'SC(K)
	AOS	HIGH1'SC(P)
	CAMN	Z,SIGZ1'SC(K)
	AOS	EQU1'SC(P)
	CAMLE	Z,SIGZ1'SC(K)
	AOS	LOW1'SC(P)>


TAB1E:	MACZ	1
	MACZ	2
	MACZ	3
	MACZ	4
	MACZ	5
	MACZ	6
	POPJ	PDP,

SIGZ11:	BLOCK	20
SIGZ12:	BLOCK	20
SIGZ13:	BLOCK	20
SIGZ14:	BLOCK	20
SIGZ15:	BLOCK	20
SIGZ16:	BLOCK	20

HIGH11:	BLOCK	4
HIGH12:	BLOCK	4
HIGH13:	BLOCK	4
HIGH14:	BLOCK	4
HIGH15:	BLOCK	4
HIGH16:	BLOCK	4

EQU11:	BLOCK	4
EQU12:	BLOCK	4
EQU13:	BLOCK	4
EQU14:	BLOCK	4
EQU15:	BLOCK	4
EQU16:	BLOCK	4

LOW11:	BLOCK	4
LOW12:	BLOCK	4
LOW13:	BLOCK	4
LOW14:	BLOCK	4
LOW15:	BLOCK	4
LOW16:	BLOCK	4

DEFINE	MACP	(SC)	<;PRINT MACRO
	MOVE	X2,HIGH1'SC(P)
	ADD	X2,LOW1'SC(P)
	ADD	X2,EQU1'SC(P)
	MOVEM	X2,X2S
	MOVE	X3,LOW1'SC(P)
	IMULI	X3,↑D100
	IDIV	X3,X2
	MOVE	U1,X3
	PUSHJ	PDP,RJOUT3
	MOVE	X3,HIGH1'SC(P)
	IMULI	X3,↑D100
	MOVE	X2,X2S
	IDIV	X3,X2
	MOVE	U1,X3
	SETZM	HIGH1'SC(P)
	SETZM	EQU1'SC(P)
	SETZM	LOW1'SC(P)
	PUSHJ	PDP,RJOUT1>

TAB1P:	PUSHJ	PDP,TERPRI
	MOVEI	U1,[ASCIZ /TABLE	   L11H      L12H      L13H      L14H      L15H      L16H
/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	MOVEI	P,3
TAB1P1:	MOVEI	U1,[ASCIZ /PHASE/]
	PUSHJ	PDP,PRINT
	MOVE	U1,P
	PUSHJ	PDP,NUMOUT
	MACP	1
	MACP	2
	MACP	3
	MACP	4
	MACP	5
	MACP	6
	PUSHJ	PDP,TERPRI
	SOJGE	P,TAB1P1
	PUSHJ	PDP,TERPRI
	POPJ	PDP,

;LOADTA BEGINL SSD SSD1 SSD2 SSD3 BEGL2 BEGL4

LOADTA:	PUSHJ	PDP,DFILL
BEGINL:	PUSHJ	PDP,TERPRI
	SETZM	TRNKNO
	SETOM	HEADFL
	MOVEI	U1,1
	MOVEM	U1,SI
	SETOM	LCONTF#
	SETZB	U1,LDEPTH
	ADDI	U1,3		;ALLOW 3 MORE
	MOVEM	U1,KDEPTH
	SETZM	LFLAG6
	SETZM	LFLAG1

BEGL2:	SETZM	PRNVAR		;CHANGING TO SETOM DID NOT HELP
	SETZM	DSKTAP
	SETZM	MGIBUF
;	PUSHJ	PDP,INSZZ	;One time in to set up DIRECT file
BEGL4:	MOVEI	U1,[ASCIZ /TYPE B, K, OR L :/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TYI
	CAIE	U1,12
	CAIN	U1,15
	JRST	.-3
	CAIN	U1,"B"
	JRST	BEGLB
	SETZM	BOLFLG		;NOT BOLAND
	CAIN	U1,"K"
	JRST	BEGLK
	CAIN	U1,"L"
	JRST	BEGLL
	JRST	BEGL3
;BEGLB BEGLK BEGLL BEGL3 GETGO LB1 COMM2 COMM COMM3 COMM1

BEGLB:	MOVE	U1,[SIXBIT /BOLAND/]
	MOVEM	U1,DATAG
	SETOM	BOLFLG		;SET FLAG 
	MOVEI	U1,[ASCIZ /BOLAND WILL BE USED/]
	JRST	.+10
BEGLK:	MOVE	U1,[SIXBIT /KEAR34/]		;WAS KEAR
	MOVEM	U1,DATAG
	MOVEI	U1,[ASCIZ /KEAR34 WILL BE USED/]	;WAS KEAR
	JRST	.+4
BEGLL:	MOVE	U1,[SIXBIT /LEES/]
	MOVEM	U1,DATAG
	MOVEI	U1,[ASCIZ /LEES WILL BE USED/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,TYI
	CAIE	U1,15
	JRST	.-2
BEGL3:	PUSHJ	PDP,DSKINI
	JRST	BEGL4
	PUSHJ	PDP,DSKIN2
	JRST	BEGL4
GETGO:	MOVEI	Z,777777
	MOVEM	Z,CFLAG
	SETOM	TRUNKF
	SETZM	HIGH
	SETZM	LOW
	SETZM	EQUAL
	SETZM	THIGH
	SETZM	TLOW
	SETZM	TEQUAL
	SETZM	HEADFL
	SOS	HEADFL
	SETZM	COUNT		;INITIALIZE FOR LEARNING
	PUSHJ	PDP,STIME
		;ASK TELETYPE WHERE TO START--IF NOT AT FRONT, THEN
		;RESET TRNKNO.  SKIP OVER TRNKNO NUMBER OF TRUNKS NOW.
	MOVEI	U1,[ASCIZ /  TRUNK NUMBER? : /]
	PUSHJ	PDP,PRINT
	MOVEI	U1,1
	PUSHJ	PDP,SCAN	;GOBBLE UP CR
	PUSHJ	PDP,EOL		;SCAN CHAR.
	JRST	BEGIN3		;CR
	SOS	U2,U1		;NUMBER
	MOVEM	U1,TRNKNO	;STARTING TRUNK NO.
	SETZM	KEAR		;TURN OFF KEAR LEARNING FLAG
LB1:	PUSHJ	PDP,NEWLIN	;FIRST CHAR. OF CARD IMAGE IN U1
	SKIP			;EOF
	CAIN	U1,"<"		;LEES OR TESCHELEIT LEARNING DATA?
	SETZM	KEAR		;YES, SO SET FLAG TO 0
	CAIN	U1,"!"		;KEAR LEARNING DATA?
	AOS	KEAR		;YES, SO SET FLAG
	CAIN	U1,"&"
	JRST	.+3
	CAIE	U1,"#"		;A "#"?
	JRST	LB1		;NO
	SOJGE	U2,LB1		;YES, BUT IS IT PROPER TRUNK CARD?
	PUSHJ	PDP,COMM1
	SETZM	X2		;YES
	SETOM	LRNJMP		;TO SKIP DATA UPDATE FIRST TIME
	JRST	LTR

COMM2:	SOJG	U2,COMM+1
	MOVEI	X1,15
	PUSHJ	PDP,TYO
	MOVEI	U1,15
	PUSHJ	PDP,MAGOUT	; CKLY
	JRST	COMM3

COMM:	MOVEI	U2,26
	PUSHJ	PDP,MAGIN	;GET NEXT CHAR.
	JRST	ENDERR		;EOF NOT EXPECTED HERE
	MOVE	X1,U1
	PUSHJ	PDP,TYO		;PRINT THE CHAR.
	PUSHJ	PDP,MAGOUT	; CKLY
	CAIE	U1,15		;<CR>?
	JRST	COMM2		;NO
COMM3:	MOVEI	X1,12		;YES, SO ...
	PUSHJ	PDP,TYO		;PRINT LINE-FEED
	MOVEI	U1,12
	PUSHJ	PDP,MAGOUT
	AOSE	HEADFL
	POPJ	PDP,
COMM1:	PUSHJ	PDP,TERPRI
	MOVEI	U1,15
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,12
	PUSHJ	PDP,MAGOUT
;25	MOVEI	U1,HEADER
;25	PUSHJ	PDP,PRINT
	POPJ	PDP,		;AND RETURN
;LFSTRT BEGIN3 BEGIN2 BEGIN4 LTR LTR1 LTR2 UPTAB UPTAB2

LFSTRT:	PUSHJ	PDP,MAGIN	;GET NEXT CHAR.
	JRST	BEGIN		;EOF FOUND
	JRST	BEGIN2+2	;U1 HAS FIRST CHAR. FOLLOWING LINE FEED

BEGIN3:	PUSHJ	PDP,TERPRI
	TTYUUO	11,0		;CLEAR TTY BUFFER
	SETOM	LRNJMP		;TO SKIP DATA UPDATE FIRST TIME
BEGIN2:
BEGIN4:	PUSHJ	PDP,NEWLIN	;FIRST CHAR. OF NEW CARD IN U1
	JRST	BEGIN		;EOF
	CAIN	U1,"!"		;"!" IS FIRST CHAR. OF KEAR DATA
	AOSA	KEAR		;KEAR NOT = 0 IFF KEAR DATA BEING PROCESSED
	SKIPA
	JRST	.+10
	CAIN	U1,"#"		;A TRUNK CARD?
	JRST	LTR		;YES
	CAIN	U1,"&"		;TEST FOR BOLAND HEADER
	JRST	LTR
	CAIE	U1,"<"		;COMMENT CARD?
	JRST	.+4		;NO
	SETZM	KEAR		;TURN OFF KEAR LEARNING FLAG
	PUSHJ	PDP,COMM	;YES, SO PRINT COMMENT
	JRST	BEGIN4		;AND GET NEXT CARD
	CAIN	U1,">"		;END OF DATA?
	JRST	LSTOP		;YES
	CAIE	U1,14		;FORM FEED?
	JRST	.+4		;NO
	PUSHJ	PDP,MAGIN	;YES, SO GET NEXT CHARACTER & TRY AGAIN
	HALT			;EOF FOUND
	JRST	BEGIN4+2
	CAIE	U1," "		;COLUMN 1 A BLANK?
	JRST	LMOVE+2		;NO, SO MUST BE A MOVE CARD
	JRST	LBRNCH		;MUST BE VARIATION CARD

LTR:	SETZM	WHOWON		;TREAT GAME AS A DRAW TILL WE KNOW BETTER
	SETZM	MOVNUM#
	MOVEI	U1,"TK"
	SKIPN	KEAR
	SETZ	U1,
	MOVEM	U1,LPOINT		;A TRUNK CARD HAS BEEN FOUND
LTR1:	AOS	U1,TRNKNO	;ADD 1 TO TRUNK CARD COUNTER
	CAIG	U1,1		;TRNKNO NOW STARTS AT 1
	JRST	LCONT
;	JUMPE	U1,LCONT		;CKLZ BYPASS
;TTYUU LCONTS LCONTZ LLSTOP LSTOP LCONT LMOVE UPDTSC LMOVE1 LMOVE2

TTYUU:	TTYUUO	2,U2
	JRST	LCONT
	PUSH	PDP,[EXP TTYUU]
	CAIE	U2,"S"
	CAIN	U2,"s"
	SKIPA
	JRST	TTYUU2
	MOVE	U1,BINDEX
	CAIL	U1,BOKSIZ
	JRST	.+4
	PUSHJ	PDP,PADMOV
	MOVEI	U1,[ASCIZ / RETURN FROM PADMOS /]
	PUSHJ	PDP,PRINT
	RELEAS	5,
	MOVEI	U1,[ASCIZ / RELEASED 5 /]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,INSZZ
	JRST	COMEND

TTYUU2:	CAIE	U2,"L"
	CAIN	U2,"l"
	SKIPA
	JRST	TTYUU3
	MOVE	U1,BINDEX
	CAIL	U1,BOKSIZ
	JRST	.+4
	PUSHJ	PDP,PADMOV
	MOVEI	U1,[ASCIZ / RETURN FROM PADMOS /]
	PUSHJ	PDP,PRINT
	RELEAS	5,
	PUSHJ	PDP,INSZZ
	JRST	XEROX

TTYUU3:	CAIE	U2,"R"
	CAIN	U2,"r"
	SKIPA
	JRST	.+4
	RELEAS	5,
	PUSHJ	PDP,INSZZ
	JRST	XEROX

	CAIE	U2,"F"
	JRST	.+3
	SET@∨4∪→
→¬∂(F~(∪!∨!(∪!	 0~∀∪π¬∪≤∪*HXE(D4∀∪∃%M(∪)∨Qβ→&~(∩∩wa)%αA
∨≠≠β9	&A∂<A∪≤A!%
~(∪!∨ %!	 X4∀∪∃%M(∪π∨5≥λVT~∃→π=≥)&t%'↔∪!∀∪→π∨9)~∀%∃%'(%→π∨≥P~∃→π=≥)4t%')54∪≠∂∪	+~∀%')∨4∪→π∨9)~∀%')∨4∪)%≥-≥≡~∀%≠∨-$∪*bXD~∀∪≠=-~∪TbY'∩4∀∪!+M⊃∀∪!⊃ Y	'-∪≥∩~(∪∃%'P∪¬∂%≤f∩∩m1)%∧A∪≥'Q%+π)%∨≤A≥∃	λ4∀∪!+M⊃∀∪!⊃ Y	'-∪≤d∩$v@hA¬!$@p@@~∀∪)%'(∪	∂∪≤L~∀∪∃I'(∪¬∃∂∪≤f4∀~∃→1')∨ h∪β∨&%*bY)I≥↔≥≡4∀∪!+M⊃∀∪!⊃ Y≥+5∨+(~(∪≠∨-∃∩∪*b17β'π%4@↑A%&A)⊃∀A≥1PA)%+9⊗A)≡↓%βλ=:~∀∪A+'⊃∀%!	 YA%∪≥(4∀∪!+M⊃∀∪!⊃ Y)I!%∩~(∪≠∨-∃∩∪*b17β'π%4@←)e!
A'¬-
A)<A'β-∀←:~∀%!+'⊃(∪!	 1!%∪≥P~∀∪!U'⊃∀∪A	 Y)∃%!%∩4∀∪∃%M(∪¬≥∪≤~∃1')∨ h∪!+'!∀∪!	@Y≠β∂%≤∩w∂∃(A≥a(Aπ⊃¬$\A)<A!%∪9(~∀∪)%'(∩8Vh∩∩m≥≡A≠=%
Aπ!β%βπQ%&X↓'≡A+A	β)
↓-β_↓)β¬→∃&~∀∪5∨-
∪`bY*b$∩w!+PAπ⊃βH\A∪≤↓0bA
=$A)3<~∀∪!U'⊃∀∪A	 Y)e≡∩∩wA%∪≥(↓π⊃β$8~∀∪∃I'(∪→M)∨ ∩$w	≡A%(Aβ∂¬∪≤~∀%')54∪π∨+9(~∀∪)%'(∪Q)3+*4∀~∃→
∨≥(t%'↔∪!∀∪¬∨→→→∞~∀%∃%'(%¬∨→β9λ~∀∪5∨-
∪TbY)%9↔≥≡~(∪!+'!∀∪!	@Y	≥+4∩w'i¬ehAiIk]VA1S]JA]SiPAQQJAiIk]VA9k[EKH~∀∪≠=-∩∪TbXbb4∀∪!+M⊃∀∪!⊃ Y≠β≥∨+(~(v∪≠∨Y∩∪*DXbh`$∩w/S1XAO↑↓i↑AC8@EBD↓←\AM%eghA¬∨&~∀l∪≠∨-∃~∪*b1-β%≥¬~F∩wIKgKh↓mCeS¬iS←\↓YKii∃d[]C5J~∀∪M)5~%-β%≥¬~F∩∩m≥←nAMiCeiLACh@@~∀∪'-∪!
∪Q%+≥↔_~∀∪!U'⊃∀∪A	 Yπ=≠~~∀%≠∨-'$∪αXf\nfl`$w→βI≤A'∨5
A≠∨I
A
%=~A')¬%)∪≥≤A¬∨βIλ~∀∪5∨-~%αY)α$∩w∂PA∪≥∪Q∪β_A	∨β%λ↓
∨$AQ⊃∪&AQ%+≥⊗4∀∪≠∨Y∩∪ 0bnfn\~∀∪≠=-~∪@Y) ~(∪')i∧∪0d1)⊗~∀%')54∪π∨→=$~∀∪M)∨~%0i-βH∩∩w)<Aπ∨+9(A-βI∪β)∪=≤A¬∨¬%	&~(∪∃%'P∪¬∂%≤d∩∩m∂≡A∂∃(A≠∨Y&A≥=.~∀~)→≠∨-∀t∪!+M⊃∀∪!⊃ Y≠β≥∪≤∩w%≥!+(↓π⊃β%¬π)%LA
∨$↓¬↔∨⊗↓≠∨-
4∀∪∃%M(∪≥⊃%$∩$w∨↓
∨+≥⊂XA≥∨PA1!∃π)λ↓⊃%
4∀∪πβ%≤∪*b0bd∩∩mαA→∪9
A
∃λ}~∀%∃%'(%→
')I(∩∩we&~∀%πβ∪
%*bXbT∩∩w∪LA∪(A∧Aπ$~(∪πβ∪8∪*bXλ@D∩∩mαA'!¬π
}~(∪∃%'P∪→≠∨Y
∩∩we&XAM≡A)%dAβ∂β%≤~∀∪M↔∪!
%→%≥∃5 ∩∩wQ'(A%A∃+5 ~∀∪)%'(∪1≠∨-
D∩∩w→¬'(A≠=-
A/¬&AαA)+≠ ~)+!	)Mεt∪'-∪!∂
%αY¬M(~∀∪)%'(∪1≠∨-
D∩∩w	<A≥∨(↓'π∨%∀A)⊃∪LA≠∨-∀~∀∪≠=-
∪⊗1'∩∩∩m≠∨-
↓∪≥	`~∀∪≠=-
∪ 1!⊃β'∀∩∩w!!β'
A%≤A ~(∪≠∨-∀∪0fYLQαR∩$w-β0A'π∨I
A
∨HA¬∨∨,A≠∨-∀~∀∪π¬≠≤∪⊗1α~∀∪M∨∃→
K,LMOVE1
	CAMGE	X3,S(K)		;IS IT THE BEST SCORE?
	AOS	HIGH(P)		;H COUNT (ADD 1 FOR EVERY SCORE > BEST)
	CAMN	X3,S(K)
	AOS	EQUAL(P)		;E COUNT
	CAMLE	X3,S(K)
	AOS	LOW(P)		;L COUNT (ADD 1 FOR EVERY SCORE < OR = BEST)
	PUSHJ	PDP,TAB1E	;ON PAGE 2
	SOJG	K,UPDTSC+3
LMOVE1:	SETZM	NNNONO#

	CAIGE	U1,50		;DO WE PRINT IT?
	JRST	.+3		;SPECIAL FOR CKLY
	CAIG	U1,71
	JRST	LMOVE2
	MOVE	X1,U1
	PUSHJ	PDP,TYO
;	PUSHJ	PDP,MAGOUT
	CAIN	U1,"%"		;A BAD MOVE
	JRST	NOGOOD
	CAIN	U1,"="		;ONLY FAIR MOVE
	JRST	NOGOOD
	CAIN	U1,"'"		;BEST MOVE
	JRST	BSTMOV
LMOVE2:	SETZM	SI
	MOVE	A,TA		;GET LAST BOARD
	MOVE	P,TP
	MOVE	K,TK
	MOVEM	A,PLA		;STORE BOARD FOR FUTURE PUPPING
	MOVEM	P,PLP
	MOVEM	K,PLK
	SETZB	X3,LXF		;ZERO INDEX & LEGAL BOOK MOVE FLAG
	AOS	X2		;INCREMENT MOVE POINTER
	CAIN	U1,"X"		;IS IT AN "X"
	JRST	XCODE		;YES
	CAIN	U1,"*"		;A STAR?
	JRST	LA1		;YES
	CAIL	U1,60		;IS IT A NUMBER?
	CAILE	U1,71		;IT IS IF 57 < U1 < 72.
	SOJA	X2,BEGIN2	;NOT A NUMBER, PROBABLY A <CR>
	PUSHJ	PDP,NOSTO+2	;A NUMBER, SO DON'T SAVE BOARD
	JRST	LA4
;NOGOOD BSTMOV NONONO KEAR. KEAR.0 KEAR.2 KEAR.3 LA1 BDSTOR LA4 LA4A LA4B

NOGOOD:	SETOM	NNNONO
	JRST	.+3
BSTMOV:	MOVEI	Z,1		;FOR DOUBLE CREDIT LATER
	MOVEM	Z,NNNONO
	PUSHJ	PDP,MAGIN
	HALT
	JRST	LMOVE2
NONONO:	MOVE	U1,COLOR
	ADDI	U1,1
	MOVEM	U1,WHOWON	;1 WHITE WINS, 2 BLACK WINS
	JRST	.-6

KEAR.:	PUSHJ	PDP,NOSTO	;GET NEXT MOVE
	MOVE	U3,LPOINT
	ANDI	U3,37777
	LSH	U3,16		;GET IN POSITION
KEAR.0:	PUSHJ	PDP,MAGIN
	HALT
	MOVE	U2,U1
	PUSHJ	PDP,MAGIN
	HALT
	CAIN	U1,15		;NOT A CR
	JRST	KEAR.2
	CAIE	U1," "
	CAIN	U1,"+"
	JRST	KEAR.2		;SINGLE CHARACTER CASE
	LSH	U2,7
	IOR	U2,U1
	PUSHJ	PDP,MAGIN
	HALT
	JRST	KEAR.3

KEAR.2:	CAIL	U2,60		;TEST FOR LETTER OR NUMBER
	CAILE	U2,71
	JRST	.+3
	ADDI	U2,14000	;ADD LEADING 0
	JRST	.+3
	LSH	U2,7
	ADDI	U2,60		;ADD TRAILING 0
KEAR.3:	IOR	U2,U3
	PUSHJ	PDP,BDSTOR
	CAIE	U1," "		;NOT A SPACE
	CAIN	U1,15		;NOT A CR
	JRST	LA4		;WE ARE THROUGH
	CAIN	U1,"+"
	JRST	KEAR.0	;SAVE AGAIN
	JRST	LA4

LA1:	SKIPE	KEAR		;WHICH DATA IS BEING PROCESSED?
	JRST	KEAR.		;KEAR DATA.
	MOVE	U2,LPOINT	;GET PRESENT BRANCH
	LSH	U2,6
	ADD	U2,X2		;ADD INDEX WITHIN THIS BRANCH
BDSTOR:	AOS	X4,X4VAR	;INDEX TO NEXT SPACE
	MOVEM	U2,ME(X4)	;STORE THE BOARD
	MOVEM	A,MA(X4)
	MOVEM	P,MP(X4)
	SKIPE	COLOR		;RIGHTMOST GUARD BIT IS COLOR
	TRO	K,400
	MOVEM	K,MK(X4)
	TRZ	K,400		;ZERO BIT (IT MIGHT NEED IT)
	MOVE	Z,WHOWON
	HRL	Z,WINLOS	;SAVE DISTANCE TO WIN OR LOSS
	MOVEM	Z,MWL(X4)	;SAVE WHOWON FLAG
	SKIPE	KEAR
	POPJ	PDP,		;KEAR WANTS RETURN
	AOSE	DWFLAG		;IT'S -1 ONLY WHEN COMING FROM XCODE
	PUSHJ	PDP,NOSTO	;GET BOOK MOVE
LA4:	PUSHJ	PDP,PHASEV	;COMPUTE INITIAL PHASE
	MOVE	U1,PHASES(U5)
	MOVEM	U1,PHASAD	;FOR USE IN EVA
	SETZB	X3,LRNJMP#	;ASSUME NORMAL MOVE
	SETZM	STOP		;WIPE SLATE CLEAN
	PUSHJ	PDP,LEGALY	;NOW GET ALL TRUNKS
	JRST	NOMOV		;NO LEGAL MOVES
	JRST	.+2		;DEPEND ON X4NORM FOR SINGLE MOVE DETECT
	AOS	U1,STOP		;BIT 35 USED FOR X3=0 CASE
;	MOVEI	U1,15
;	PUSHJ	PDP,MAGOUT
;	MOVEI	U1,12
;	PUSHJ	PDP,MAGOUT
;	PUSHJ	PDP,LEGM	;SPECIAL FOR CKLY***
	PUSHJ	PDP,X4NORM
	MOVE	Z,X4ALL
	TRNN	Z,16
	JRST	LA4JJ		;MAY BE FORKED
LA4A:	SKIPN	U1,WHOWON
	JRST	LA4B	;OK TO GO ON
	SUBI	U1,1
	CAMN	U1,COLOR
	JRST	LA4J		;DO NOT LEARN
LA4B:	SKIPGE	NNNONO
	JRST	LA4J		;DO NOT LEARN
	JRST	LA4J		; CKLY INSERT
	MOVEI	X1,1
	MOVE	Z,EEB
	MOVEM	Z,EB
	MOVEM	Z,EBA
	MOVE	Z,EEB2
	MOVEM	Z,EB2
	MOVEM	Z,EBA2
	SETZM	TA		;FILLED AFTER BOOK MOVE
	SETZM	X4CNT
	SETZM	X4MOVE
	AOJA	X3,ALS2
;LA4JJ LA4J DSKINI DSKER DATAG EB EB2 EBA EBA2

LA4JJ:	SETOM	LRNJMP
	ADDI	X3,1
	MOVE	Z,PLRF-1(X3)
	MOVEM	Z,LA4RF#	;SAVE IF NEEDED
	MOVE	Z,PLLF-1(X3)
	MOVEM	Z,LA4LF#
	MOVE	Z,PLLB-1(X3)
	MOVEM	Z,LA4LB#
	MOVE	Z,PLRB-1(X3)
	MOVEM	Z,LA4RB#
	PUSHJ	PDP,PUP
	JRST	NOMOV		;ERROR SHOULD NEVER HAPPEN
	CAME	P,TP
	JRST	.+3
	MOVEM	A,TA
	MOVEM	K,TK
	PUSHJ	PDP,PUP
	JRST	LDEF		;0NLY ONE MOVE
	MOVE	Z,LA4RF
	MOVEM	Z,PLRF-1(X3)
	MOVE	Z,LA4LF
	MOVEM	Z,PLLF-1(X3)
	MOVE	Z,LA4LB
	MOVEM	Z,PLLB-1(X3)
	MOVE	Z,LA4RB
	MOVEM	Z,PLRB-1(X3)
	SETZM	LRNJMP
	SOJA	X3,LA4A

LA4J:	SETOM	LRNJMP
	SETZM	TA
	ADDI	X3,1
	PUSHJ	PDP,PUP
	JRST	LDEF
	CAME	P,TP
	JRST	.-3
	MOVEM	A,TA
	MOVEM	K,TK
	JRST	LDEF

DSKINI:	INIT	4,0
	SIXBIT	/DSK/
	XWD	MGOBUF,MGIBUF
	JRST	DSKER
	SETZM	DATAG+2
	MOVE	U1,[SIXBIT /CH4ALS/]		;Was /  2KDH/
	MOVEM	U1,DATAG+3
	LOOKUP	4,DATAG
	JRST	DSKER
	INBUF	4,11
	AOS	(PDP)
	POPJ	PDP,

DSKER:	MOVEI	U1,[ASCIZ /NO GAMES ON DSK/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	RELEAS	4,
	POPJ	PDP,

DATAG:	SIXBIT	/LEES/
	SIXBIT	//
	Z
	Z

DSKIN2:	INIT	5,0			;CKLY FIX
	SIXBIT	/DSK/
	XWD	MGOBUF,0
	JRST	DSKER2
	SETZM	DATAG2+2
	MOVE	U1,[SIXBIT /  1ALS/]
	MOVEM	U1,DATAG2+3
	ENTER	5,DATAG2
	JRST	DSKER2
	OUTBUF	5,11
	AOS	(PDP)
	POPJ	PDP,

FRMBUF:	BLOCK	3

DSKER2:	MOVEI	U1,[ASCIZ /COULD NOT ENTER FORM.DAT/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	RELEAS	5,
	POPJ	PDP,

DATAG2:	SIXBIT	/FORM/
	SIXBIT	/DAT/
	Z
	Z

	Z		;GUARD
EB:	BLOCK	20
	Z
EB2:	BLOCK	20
EBA:	Z
EBA2:	Z
;ALS1 ALS1B ALS1A ALS2 ALS3

ALS1:	MOVE	Z,EB+2
	MOVEM	Z,EEB
	MOVE	Z,EB+1
	MOVEM	Z,EEB+1
	MOVE	Z,EB2+2
	MOVEM	Z,EEB2
	MOVE	Z,EB2+1
	MOVEM	Z,EEB2+1
ALS1B:	MOVEI	X1,1		;FOR NON-BOOK MOVES
	SKIPE	LXF
	HRLZ	X1,X4ALL	;TO LEFT HALF FOR BOOK MOVES
	LSH X1,1		;TEMPORARY FIX TO TEST
	SKIPLE	NNNONO
	LSH	X1,1		;MULTIPLY BY TWO FOR WIN
	ADDM	X1,SIGLF(U5)	;UPDATE FINAL TABLE

;	SUB U5,PHASAD		;Insert for SYM smoothing in situ
;	MOVNS U5
;	ADD U5,PHASAD
;	MOVSS X1
;	ADDM X1,SIGLF(U5)

	AOS	U2,SI
	MOVEM	Z,S(U2)
	SKIPE	LXF
	MOVEM	U2,BEST
ALS1A:	MOVE	Z,EBA
	MOVEM	Z,EB		;OLD VALUE MAY HAVE BEEN BLASTED
	MOVEM	Z,EEB
	MOVE	Z,EBA2
	MOVEM	Z,EB2
	MOVEM	Z,EEB2
	MOVE	Z,EEB-1
	MOVEM	Z,EEB+1
	MOVE	Z,EEB2-1
	MOVEM	Z,EEB2+1
ALS2:	MOVEI	X3,1		;SAFETY MEASURE
	MOVE	Z,LOSE		;RESET FOR EACH NEW BRANCH
	MOVEM	Z,ZZ-1
	MOVEM	Z,ZZ
	SETZM	LXF
	PUSHJ	PDP,PUP
	JRST	LDEF		;LAST BRANCH PROCESSED
	SETZM	EVFLAG#
	AOS	X4CNT		;COUNT OF MOVES
	CAME	P,TP		;IS THIS THE BOOK MOVE
	JRST	ALS3		;NO
	MOVEM	A,TA		;SAVE UPDATED BOARD
	MOVEM	K,TK
	SETOM	LXF		;SET FLAG
	MOVE	U1,X4CNT	;GET MOVE COUNT
	SKIPE	COLOR
	MOVE	U1,X4TAB(U1)
	HRL	U1,WINLOS
	MOVEM	U1,X4MOVE
	SOSGE	WINLOS
	SETZM	WINLOS		;NEG VALUE MEANS TROUBLE
ALS3:	MOVEM	A,PLA(X3)	;PREPARE FOR EXTENSION
	MOVEM	P,PLP(X3)
	MOVEM	K,PLK(X3)
	MOVE	Z,STOP
	AND	Z,STOMP(X3)	;SAVE EARLIER X3 VALUES ONLY
	MOVEM	Z,STOP
	PUSHJ	PDP,LEGAL
	JRST	ALS8
	JRST	ALS3J
	MOVE	Z,STOP
	IOR	Z,STBIT(X3)	;RECORD THIS NON-JUMP MOVE
	MOVEM	Z,STOP
	CAMGE	X3,LDEPTH
	AOJA	X3,ALS5		;GO DEEPER
	AND	Z,STTEST(X3)	;IS OTHER SIDE EVALUATED
	JUMPN	Z,ALS3A		;YES SO DO FULL EVA
	CAMGE	X3,KDEPTH	;MUST WE STOP ANYWAY
	AOJA	X3,ALS5		;NO
	JRST	ALS3A		;DO THE BEST WE CAN
;ALS3J ALS3A ALS3B ALS4 ALS5 ALS6 ALS7 ALS8

ALS3J:	CAIGE	X3,17		;SPACE LIMIT

	AOJA	X3,ALS4
	SKIPN	LXF		;IS THIS THE BOOK MOVE
	JRST	ALS1A		;NO SO IGNORE THIS PART
	SETOM	BEST		;IGNORE SIGNAL
	JRST	LDEF

ALS3A:	CAIG	X3,1
	JRST	ALS1B		;LEVI IN ALS1B ADEQUATE
	SETZM	LFLAG		;DO NOT UPDATE TABLES NOW
	PUSHJ	PDP,EVA		;BUT DO EVA
ALS3B:	SETOM	LFLAG		;RESET LEARN FLAG
	MOVNS	Z
	CAMG	Z,ZZ-1(X3)
	JRST	ALS6
	MOVEM	Z,ZZ-1(X3)	;BACK SCORE
	MOVE	Z,EEB(X3)
	MOVEM	Z,EB(X3)	;ALSO BACK EV DATA
	MOVE	Z,EEB2(X3)
	MOVEM	Z,EB2(X3)
	MOVE	Z,EEB-1(X3)
	MOVEM	Z,EB-1(X3)
	MOVE	Z,EEB2-1(X3)
	MOVEM	Z,EB2-1(X3)
	JRST	ALS6		;GET NEXT BOARD AT THIS LEVEL

ALS4:	MOVE	Z,EEB-3(X3)	;ADVANCE SINCE NOT COMPUTED FOR JUMP
	MOVEM	Z,EEB-1(X3)
	MOVE	Z,EEB2-3(X3)
	MOVEM	Z,EEB2-1(X3)
ALS5:	MOVE	Z,ZZ-3(X3)
	MOVEM	Z,ZZ-1(X3)
ALS6:	PUSHJ	PDP,PUP		;GET NEXT BOARD
	JRST	ALS7
	JRST	ALS3

ALS7:	CAIG	X3,2		;BACKING FROM WHERE
	SOJA	X3,ALS1		;TIME TO UPDATE TABLES
	MOVN	Z,ZZ-1(X3)	;NORMAL BACK UP
	CAMG	Z,ZZ-2(X3)
	SOJA	X3,ALS6		;GET NEXT BOARD
	MOVEM	Z,ZZ-2(X3)
	MOVE	Z,EB(X3)
	MOVEM	Z,EB-2(X3)
	MOVE	Z,EB2(X3)
	MOVEM	Z,EB2-2(X3)
	SOJA	X3,ALS6

ALS8:	MOVE	Z,LOSE
	JRST	ALS3B
;LDEF LDEFA FORGIV LOC LOC1 XCODE XCODE0 LA2 BM LA3

LDEF:	MOVE	Z,EBA		;NEXT MOVE PROTECTION
	MOVEM	Z,EEB-1
	MOVE	Z,EBA2
	MOVEM	Z,EEB2-1
	MOVEI	X3,1
	XORM	X3,COLOR	;CHANGE COLOR
	PUSHJ	PDP,MAGIN	;GET NEXT CHAR.
	JRST	ENDERR		;EOF NOT EXPECETED HERE
	CAIN	U1,"/"		;A "/"?
	SOJA	X2,.-3		;YES, SO DON'T COUNT THIS LAST MOVE
	SKIPN	TA		;TA NOT = 0 IF BOOK MOVE WAS FOUND
	JRST	FORGIV-1	;TA NOT ZERO IF BOOK MOVE FOUND
;	SKIPN	LRNJMP		;SINGLE JUMPS NOT STORED
;	SKIPN	USEBOK		;ARE WE SAVING ROTE
;	JRST	LMOVE+2		;NO
	MOVEM	U1,U1S#
	SKIPN	WINLOS
	JRST	LDEFA		;NO WINLOS GIVEN
	MOVE	U1,WHOWON
	JUMPE	U1,LDEFA	;NO WHOWON DATA
	ADD	U1,COLOR	;NOTE COLOR ALREADY UPDATED
	ADD	U1,WINLOS	;ALSO ALREADY CHANGED
	TRNN	U1,1
	AOS	U1,WINLOS	;CORECT VALUE TO AGREE
	HRLM	U1,X4MOVE	;FIX X4MOVE
	TRNE	U1,1
	JRST	.+3
LDEFA:	SKIPL	NNNONO		;IS THIS LESS THAN BEST
	PUSHJ	PDP,SAVMOV	;NOW SAVE BOARD
	MOVE	U1,U1S
	JRST	LMOVE+2

	MOVEI	U1,[ASCIZ /ILLEGAL BOOK MOVE /]
FORGIV:	MOVEM	U1,ERRMES#
	PUSHJ	PDP,MAGIN	;SEE IF WE CAN FORGIVE THIS BOOK MOVE ERROR
	JRST	ENDERR
	CAIE	U1,15		;CR?
	JRST	.+10
	PUSHJ	PDP,NEWLIN	;YES, SO GET NEW LINE
	JRST	ENDERR
	CAIN	U1," "
	JRST	LBRNCH
	CAIE	U1,"&"
	CAIN	U1,"#"
	JRST	LTR
	CAIE	U1,"*"
	JRST	FORGIV+1
LOC:	MOVE	U1,ERRMES
	PUSHJ	PDP,PRINT
	MOVEM	X2,SAVX2
	MOVE	U1,LPOINT	;PRINT CURRENT VARIATION POINTER
	SETZ	X2,
	JUMPE	U1,.+3
	LSHC	U1,-7
	JUMPN	U1,.-1
	MOVEM	X2,ASCPNT#
	MOVEI	U1,ASCPNT
	PUSHJ	PDP,PRINT
	MOVEI	U1,[ASCIZ / MOVE /]
	PUSHJ	PDP,PRINT
	MOVE	U1,SAVX2	;PRINT NUMBER OF MOVES WITHIN THIS VARIATION
	PUSHJ	PDP,NUMOUT
	PUSHJ	PDP,TERPRI
LOC1:	PUSHJ	PDP,NEWLIN	;FIND TRUNK CARD
	JRST	ENDERR		;EOF NOT EXPECTED HERE
	CAIN	U1,"#"		;TRUNK CARD?
	JRST	LTR		;YES, SO GO TO LTR
	CAIN	U1,"&"		;A BOLAND HEADER CARD
	JRST	LTR		;YES
	JRST	.-6		;NO, SO GET NEXT CARD
XCODE:	PUSHJ	PDP,MAGIN	;SKIP OVER BLANK
	JRST	ENDERR		;EOF NOT EXPECTED HERE
	CAIN	U1,"/"		;A "/"?
	SOJA	X2,XCODE	;YES, SO DON'T COUNT "X" & GET NEXT CHAR.
XCODE0:	PUSHJ	PDP,MAGIN	;GET NEXT CHARACTER
	JRST	ENDERR		;EOF FOUND, BUT NOT EXPECTED
	CAIN	U1," "		;A SPACE?
	JRST	XCODE0		;YES, SO TRY AGAIN
	CAIE	U1,15		;A <CR>?
	JRST	.+3
	PUSHJ	PDP,NEWLIN	;YES, SO GET NEW LINE
	JRST	ENDERR
	CAIGE	U1,72		;IS IT A DIGIT?
	CAIGE	U1,60		;IT IS IF 57 < U1 < 71.
	CAIN	U1,"*"		;NOT A NUMBER, SO IS IT A "*"?
	AOSA	X2		;IT IS A NUMBER OR A STAR
	JRST	BEGIN2+2	;NO MOVES FOLLOW "X"
	CAIE	U1,"*"		;IS IT A STAR?
	JRST	.+4		;NO
	SETOM	DWFLAG		;YES, SO SET FLAG
	PUSHJ	PDP,NOSTO
	SKIPA
	PUSHJ	PDP,NOSTO+2	;GET BOOK MOVE   
LA2:				;PUSHJ	PDP,FIXX DID NOT WORK HERE
	PUSHJ	PDP,LEGAL	;START LOOKING FOR MOVES
	JRST	NOMOVE		;NO LEGAL MOVES, SO GO TO ERROR ROUTINE
	AOSA	X3
	ADDI	X3,1
	CAIN	X3,1		;FIRST TIME THRU?
	JRST	LA3		;YES, SO WE KNOW THIS IS NOT THE BOOK MOVE
	SKIPL	U1,U4S		;GET MOVE DELTA
	JRST	BM		;A BACKWARD MOVE
	TRNE	U1,3		;RIGHT OR LEFT?
	SKIPA	U1,PLLF-1(X3)	;LF MOVE
	MOVE	U1,PLRF-1(X3)	;RF MOVE
	JRST	.+4
BM:	TRNE	U1,3		;RIGHT OR LEFT?
	SKIPA	U1,PLRB-1(X3)	;RB MOVE
	MOVE	U1,PLLB-1(X3)	;LB MOVE
	TDNN	U1,U2SS		;AND HERE IS BOOK MOVE
	JRST	LA3		;THEY DO NOT INTERSECT
	MOVE	A,PLA-1(X3)
	MOVEM	A,TA		;STORE BOARD AFTER X HAS BEEN COMPLETED
	MOVEM	A,PLA
	MOVE	P,PLP-1(X3)
	MOVEM	P,TP
	MOVEM	P,PLP
	MOVE	K,PLK-1(X3)
	MOVEM	K,TK
	MOVEM	K,PLK
	MOVEI	U2,1		;IN CASE COLOR NEEDS CHANGING
	TRNN	X3,1		;"X" CHANGE THE ACTIVE SIDE?
	XORM	U2,COLOR	;YES
	SETZM	X3
	MOVE	U2,BKMOVE
	XOR	U2,A
	MOVEM	U2,TP		;TP NOW SET UP
	SKIPGE	DWFLAG
	JRST	LA1		;"X" FOLLOWED BY A "*"
	JRST	LA4
LA3:	PUSHJ	PDP,PUP
	SOJA	X3,.-1		;BACK UP IF THIS LEVEL IS EXHAUSTED
	MOVEM	A,PLA(X3)	;FOR FUTURE PUP'S
	MOVEM	P,PLP(X3)
	MOVEM	K,PLK(X3)
	CAIL	X3,12		;SHOULD WE GO DEEPER?
	JRST	LA3		;NO, BACK-UP
	JRST	LA2		;YES
;BBRNCH KBRNCH KBRNC2 KBRNC3 KBRNC4 KBRNC5 KBRNC6 LBRNCH LUL LUPE LDO LHERE

BBRNCH:	PUSHJ	PDP,MAGIN
	HALT
	CAIE	U1,11		;LOOK FOR A TAB
	JRST	.-3
	JRST	KBRNC2		;KEAR ROUTINE OK NOW

KBRNCH:	MOVEI	U2,↑D21
	PUSHJ	PDP,MAGIN	;GET 23RD CHAR.
	HALT
 	PUSHJ	PDP,MAGOUT	;J9
	SOJG	U2,.-3		;J9
KBRNC2:	PUSHJ	PDP,MAGIN	;THIS IS 23RD CHAR.
	HALT
	MOVE	U3,U1
	PUSHJ	PDP,MAGOUT	;J9
	PUSHJ	PDP,MAGIN	;GET NEXT CHAR.
	HALT
	PUSHJ	PDP,MAGOUT	;J9
	CAIN	U1,15
	JRST	LDOK		;was JRST	LDO+4
	CAIE	U1,11
	CAIN	U1," "
	JRST	KBRNC3
	LSH	U3,7		;MOVE FIRST CHAR. OVER
	IOR	U3,U1		;AND PUT IN SECOND CHAR.
	JRST	KBRNC4

KBRNC3:	CAIL	U3,60
	CAILE	U3,71
	JRST	.+3
	ADDI	U3,14000
	JRST	.+3
	LSH	U3,7
	ADDI	U3,60
KBRNC4:	MOVEM	U3,LPOINT	;STORE VAR. POINTER
	PUSHJ	PDP,MAGIN	;GET NEXT NON-SPACE CHAR.
	HALT
	PUSHJ	PDP,MAGOUT	;j9
	CAIN	U1,15		;WAS CHARACTER A CR
	JRST	LDOK		;LDO+4		;AN ERROR
	CAIE	U1,11		;IS IT A TAB
	CAIN	U1," "		;IS IT A SPACE
	JRST	.-7		;LAST CHAR. WAS A SPACE OR TAB
	MOVE	A,U1
	PUSHJ	PDP,MAGIN
	HALT
	CAIE	U1,15
	JRST	KBRNC5
	CAIL	A,60
	CAILE	U1,71
	JRST	.+3
	ADDI	A,14000
	JRST	.+3
	LSH	A,7
	ADDI	A,60
	JRST	KBRNC6

KBRNC5:	LSH	A,7
	PUSHJ	PDP,MAGOUT		;J9
	IOR	A,U1
KBRNC6:	LSH	A,16
	IOR	U3,A
	JRST	LDOK		;LDO+4		;NOW GO FIND MATCH

LBRNCH:	
	MOVEI	U1,40		;Start line with 2 spaces
	PUSHJ	PDP,MAGOUT
	PUSHJ	PDP,MAGOUT
	MOVE	U1,TRNKNO	;then the trunk number
	PUSHJ	PDP,DNUM
;	MOVEI	U1,40		;Another space
;	PUSHJ	PDP,MAGOUT
	AOS	U1,VARNAM	;Update and print VARNAM
;	CAILE	U1,"z"
;	MOVEI	U1,"A"		;Go to caps if necessary
;	PUSHJ	PDP,MAGOUT
	PUSHJ	PDP,VAROUT	;Report name as 2 l.c. letters
	MOVEI	U1,40
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,[ASCIZ /	VARIATION /]
	PUSHJ	PDP,PRINT
	SETZM	MOVNUM 
	SKIPE	PRNVAR
	JRST	LOC1
	SETZB	X2,U3		;ZERO MOVE POINTER
	SKIPE	BOLFLG
	JRST	BBRNCH		;BOLAND FORMAT USED
	SKIPE	KEAR		;KEAR DATA?
	JRST	KBRNCH		;YES
	MOVEI	U2,↑D35		;GET TO CHAR. #37
	PUSHJ	PDP,MAGIN	;GET CHAR. 
	JRST	ENDERR
	PUSHJ	PDP,MAGOUT	; CKLY
	SOJG	U2,.-3		;JUMP IF NOT CHAR. #36
LUL:	SETZB	U2,VARNUM
LUPE:	PUSHJ	PDP,MAGIN	;GET CHAR. FROM INPUT BUFFER
	JRST	ENDERR		;EOF NOT EXPECTED HERE
	CAIGE	U1,72		;IS CHAR. A DIGIT?
	CAIGE	U1,60		;IT IS IF 57 < U1 < 72.
	JRST	LDO		;NO
	MOVE	X1,U1
	PUSHJ	PDP,TYO  	;CKLY FIX
	PUSHJ	PDP,MAGOUT	; CKLY
	IMULI	U2,12
	ADD	U2,U1
	SUBI	U2,60
	JRST	LUPE
LDO:	LSH	U3,6		;SAVE LAST NUMBER
	ADD	U3,U2
	CAIN	U1," "		;ARE WE THROUGH?
	JRST	.+5
	PUSHJ	PDP,MAGOUT	; CKLY 
	MOVEI	U1,[ASCIZ /,/]
	PUSHJ	PDP,PRINT
	JRST	LUL		;NO
	PUSHJ	PDP,TERPRI
LDOK:   MOVEI	U1,15
	PUSHJ	PDP,MAGOUT	; CKLY
	MOVEI	U1,12
	PUSHJ	PDP,MAGOUT	; CKLY
	MOVEM	U3,LPOINT	;STORE THIS BRANCH NUMBER
	MOVEM	U3,VARNUM	;STORE THIS BRANCH NUMBER
	MOVE	U2,X4VAR	;X4VAR IS NUMBER OF SAVED BOARDS
	CAMN	U3,ME(U2)	;LOOK FOR PROPER TABLE ENTRY
	JRST	LHERE		;FOUND IT
	SOJGE	U2,.-2		;KEEP LOOKING
	TDZA	U3,.+1		;NO MATCH, SO VAR. POINTER ERROR?
	777777740000
	MOVE	U2,X4VAR		;TRY AGAIN, THIS TIME WITH VAR. MASKED OUT
	MOVE	U1,ME(U2)
	TRZ	U1,740000
	CAIN	U3,(U1)		;ARE MOVE POINTERS EQUAL?
	JRST	LHERE		;YES, SO THIS IS THE ONE WE WANT, WE HOPE
	SOJGE	U2,.-4
	MOVEI	U1,[ASCIZ /BAD TRUNK  /]
	JRST	FORGIV
LHERE:	MOVE	A,MA(U2)	;GET THE BOARD
	MOVEM	A,TA		;PUT IT IN PROPER PLACE
	MOVE	P,MP(U2)
	MOVEM	P,TP
	MOVE	K,MK(U2)
	SETZM	COLOR
	TRZE	K,400		;BIT 27 OF K HAS COLOR
	AOS	COLOR
	MOVEM	K,TK
	MOVE	U1,MWL(U2)
	HRRZM	U1,WHOWON
	HLRZM	U1,WINLOS
	MOVEI	U1,11
	PUSHJ	PDP,MAGOUT
	PUSHJ	PDP,BOUT
	MOVEI	U1,15
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,12
	PUSHJ	PDP,MAGOUT
;	PUSHJ	PDP,BDOUT
	JRST	BEGIN2		;NOW START LEARNING
;NOMOV NOMOVE ENDERR LERR MAGOU2 MAGOU3 NOSTO STOP STOMP STTEST STBIT


NOMOV:	MOVEI	U1,[ASCIZ /"LMOVE" ERROR: NO LEGAL MOVES /]
	JRST	FORGIV

NOMOVE:	MOVEI	U1,[ASCIZ /"X" ERROR: NO LEGAL MOVES /]
	JRST	FORGIV

ENDERR:	MOVEI	U1,[ASCIZ /EOF FOUND, BUT NOT EXPECTED /]
	JRST	FORGIV

LERR:	MOVE	U2,U1
	MOVEI	U1,[ASCIZ /LEARNING OVERFLOW/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	MOVE	U1,U2
	JRST	X4VAR

MAGOU2:	MOVE	X1,U1
MAGOU3:	IDIVI	X1,12
	JUMPE	X1,MAGOU4
	MOVEM	U1,UEXYZ#
	MOVE	U1,X1
	ADDI	U1,"0"
	PUSHJ	PDP,MAGOUT
	MOVE	U1,UEXYZ
MAGOU4:	ADDI	U1,"0"
	PUSHJ	PDP,MAGOUT
	POPJ	PDP,

NOSTO:	PUSHJ	PDP,MAGIN	;GET FIRST NUMBER
	JRST	ENDERR		;EOF IS NOT AN ACCEPTABLE NUMBER
	MOVE	U2,U1
	AOS	X1,MOVNUM	;SPECIAL FOR CKLY
;	PUSHJ	PDP,MAGOU3	;MAY 18
;M30	MOVE	U1,MOVNUM
;M30	PUSHJ	PDP,NUMOUT
;M30	MOVEI	U1,[ASCIZ /	/]
;M30	PUSHJ	PDP,PRINT
	MOVEI	U1,11
;	PUSHJ	PDP,MAGOUT
	MOVE	X1,U2
;25	PUSHJ	PDP,TYO		; SPECIAL FOR CKLY
	MOVE	U1,U2
;	PUSHJ	PDP,MAGOUT
	IMULI	U2,12
	PUSHJ	PDP,MAGIN	;GET SECOND NUMBER
	JRST	ENDERR
	MOVE	X1,U1
;25	PUSHJ	PDP,TYO		;SPECIAL FOR CKLY
;	PUSHJ	PDP,MAGOUT
	ADD	U1,U2
	SUBI	U1,1020		;NORMALIZE FOR ASCII CODE
	HRLZM	U1,BOOKMS
	PUSHJ	PDP,OUTIN
	MOVE	U4,U1
	MOVNS	U1
	MOVSI	U3,400000
	LSH	U3,(U1)		;CREATE PROPER BIT POSITION
;25	MOVEI	U1,[ASCIZ /-/]
;25	PUSHJ	PDP,PRINT
	MOVEI	U1,55
;	PUSHJ	PDP,MAGOUT
	PUSHJ	PDP,MAGIN	;SAME ROUTINE AS ABOVE
	JRST	ENDERR
	MOVE	X1,U1
;25	PUSHJ	PDP,TYO		;SPECIAL FOR CKLY
	MOVE	U2,U1
;	PUSHJ	PDP,MAGOUT
	IMULI	U2,12
	PUSHJ	PDP,MAGIN
	JRST	ENDERR
	MOVE	X1,U1
;25	PUSHJ	PDP,TYO		;SPECIAL FOR CKLY
;	PUSHJ	PDP,MAGOUT
	ADD	U1,U2
	SUBI	U1,1020
	HRRM	U1,BOOKMS
	PUSHJ	PDP,OUTIN
	SUB	U4,U1		;U4 IS MOVE DELTA
	MOVM	U5,U4
	MOVNS	U1
	MOVSI	U2,400000
	LSH	U2,(U1)		;U3-U2 IS MOVE
	MOVEM	U3,U2SS		;SOURCE BIT
	MOVEM	U4,U4S		;MOVE DELTA
	IOR	U2,U3
	MOVEM	U2,BKMOVE	;SAVE FOR ROTE
	XOR	U2,A
	MOVEM	U2,TP		;BOOK MOVE TO VERIFY
;25	MOVEI	U1,[ASCIZ /	/]
;25	PUSHJ	PDP,PRINT
	MOVEI	U1,11
;	PUSHJ	PDP,MAGOUT
	POPJ	PDP,

STOP:	Z		;STOP LOOK AHEAD WORD

STOMP:	0		;CLEAN UP STOP
	1		;INDEXED BY X3
	3
	7
	17
	37
	77
	177

STTEST:	0		;TO TEST OTHER SIDE EVAL
	1		;INDEXED BY X3
	2
	5
	12
	25
	52
	125

STBIT:	1		;NORMAL MOVE INDICATORS FOR STOP WORD
	2		;INDEXED BY X3
	4
	10
	20
	40
	100
	200

;LINEAR L1 L2 L3 L4 L5 L5A L7 L8 L9 L9A L10 L10A L10B L10C L12 L13 L14 L14N

;MACRO USED INL25B
DEFINE	TAB	(T)	<;TABLE COEF. MACRO
	SETZ	X1,
	MOVE	Z,T(X1)
	PUSHJ	PDP,TRJOUT
	ADDI	X1,1
	CAIGE	X1,5
	JRST	.-4>

LINEAR:	MOVE	A,[XWD -1,LRNPDL]
	SKIPN	LFLAG1
	JRST	L1
	SKIPN	RFLAG#
	JRST	.+4
	SETZM	RFLAG
	SETOM	LFLAG5
	SETOM	LFLAG6
	SKIPN	LFLAG5
	JRST	L1
	SETZ	X4,
	PUSHJ	PDP,TERPRI
	MOVEI	U1,[ASCIZ /LINEAR TERM COEFFICIENTS/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,TERPRI
L1:
	POP	A,K		;GET TABLE START
	JUMPE	K,L21A		;LAST AT THIS LEVEL
	POP	A,Q		;GET RESULT START
	MOVEI	P,3		;PHASE COUNTER
	SKIPN	LFLAG5
	JRST	L2
	REPEAT	4,<
	REPEAT	3,<	XCT	TLIST(X4)
	ADDI	X4,1
	PUSHJ	PDP,PRINT>
	PUSHJ	PDP,TERPRI
	ADDI	X4,17>
	SUBI	X4,105
L2:	MOVEI	U3,26		;ENTRIES PER TABLE
	MOVNM	U3,U3S#
	HRRM	K,L5		;FIX UP ADDRESSES
	HRRM	K,L5A
	HRRM	K,AC
	HRRM	K,AC1
	HRRM	K,L10
	HRRM	K,L10A
	HRRM	Q,L12
	HRRM	Q,C3P
	HRRM	Q,C3N
	HRRM	Q,AC2
	HRRM	Q,C6
	HRRM	Q,C5
	JRST SM			;TEMPORARY TEST OF NEW ROUTINE*****
	MOVEI	X1,12
	SETZM	TRMA(X1)	;CLEAR TABLES
	SOJGE	X1,.-1
	MOVEI	X1,2
L3:	MOVEI	X2,2
L4:	MOVEI	X3,4
L5:	MOVE	Z,(U3)
	TDNN	Z,[200000,,200000]
	JRST	.+4
	LSH	Z,-1		;DIVIDE TO PREVENT OVERFLOW
	AND	Z,[177777,,177777]
L5A:	MOVEM	Z,(U3)
	ASH	Z,-1		;TO HELP OVERFLOW PROBLEM
	AND	Z,[77777,,77777]
	ADDM	Z,TRMA(X1)
	ADDM	Z,TRMB(X2)
	ADDM	Z,TRMC(X3)
	SUBI	U3,1
	SOJGE	X3,L5
	SOJGE	X2,L4
	SOJGE	X1,L3
	SKIPN	LFLAG1
	JRST	.+10
	MOVE	Z,TRMA
	ADD	Z,TRMA+2
	ADDB	Z,TRMA+1	;CAN USE TEMPORARILY
	LSH	Z,-22
	ADD	Z,TRMA+1
	ANDI	Z,777777
	MOVEM	Z,TRMAT#
	SETZM	TRMA+1		;REQUIRED BY SYMETRY
	SETZM	TRMB+1
	SETZM	TRMC+2
	MOVS	Z,TRMA
	ADDB	Z,TRMA+2
	MOVSM	Z,TRMA		;THIS ADDS THESE CORRECTLY
	SKIPE	LFLAG1		;DO WE PRINT
	PUSHJ	PDP,LRJOUT
	MOVS	Z,TRMB
	ADDB	Z,TRMB+2
	MOVSM	Z,TRMB
	SKIPE	LFLAG1
	PUSHJ	PDP,LRJOUT
	MOVS	Z,TRMC
	ADDB	Z,TRMC+4
	MOVSM	Z,TRMC
	SKIPE	LFLAG1
	PUSHJ	PDP,LRJOUT
	MOVS	Z,TRMC+1
	ADDB	Z,TRMC+3
	MOVSM	Z,TRMC+1
	SKIPE	LFLAG1
	PUSHJ	PDP,LRJOUT
	MOVEI	U3,26
	SETZM	CPOS#		;COUNT OF POSITIVE ENTRIES
	SETZM	CNEG#		;COUNT OF NEGATIVE ENTRIES
	MOVEI	X1,2
L7:	MOVEI	X2,2
L8:	MOVEI	X3,4
L9:	SETZ	Z,
	SKIPN	LFLAG2
	JRST	L10
	ADD	Z,TRMA(X1)
	ADD	Z,TRMB(X2)
	ADD	Z,TRMC(X3)
	TRNN	Z,400000	;TEST FOR RIGHT OVERFLOW
	TLNE	Z,200000	;TEST FOR LEFT OVERFLOW
	PUSHJ	PDP,LZ		;REPORT TROUBLE
L9A:	ASH	-6		;DIVIDE BY 64
	MOVE	U1,WEIGHT
	AND	Z,LMSKW(U1)		;PURGE UNDERFLOW
L10:	ADD	Z,(U3)
	SKIPN	LFLAG7
	JRST	L10C
	MOVN	U1,U3
L10A:	MOVS	U2,(U1)
L10B:	LSH	U2,-1
	MOVE	U1,WEIGH1
	AND	U2,LMSKW(U1)
	ADD	Z,U2
L10C:	HLRZ	U1,Z
	HRRZ	U2,Z
	JUMPE	Z,L12
	SUB	U1,U2
	LSH	U2,1
	ADD	U2,U1
	ASH	U1,14		;MULTIPLY BY 4096
	MOVEM	X2,X2S
	IDIV	U1,U2
	MOVE	X2,X2S
	SKIPLE	U1
	AOS	CPOS		;COUNT POS ENTRIES
	SKIPGE	U1
	AOS	CNEG		;COUNT NEG ENTRIES
	SKIPE	U1		;DO NOT BOTHER WITH ZERO ENTRIES
	ADD	U1,CORADD
L12:	MOVEM	U1,(U3)
	SUBI	U3,1
	SOJGE	X3,L9
	SOJGE	X2,L8
	SOJGE	X1,L7
L13:	MOVE	X5,CPOS		;ENTRIES
	ADDI X5,1		;So that none will be missed
;	LSH	X5,-1		;DIVIDE BY 2
	IDIVI X5,3		;NOW 7 BUCKETS 
	MOVEM U5,U5SAVE#
	MOVEM	X5,CPOS		;ENTRIES PER BUCKET
;	MOVEI	U5,2		;LARGEST QUANTUM
	MOVEI	U5,3		;LARGEST QUANTUM
	SETZB	U1,U2		;SAFETY MEASURE
L14:	MOVEI	U3,26		;TO INDEX TABLE
	PUSHJ	PDP,C2P		;FIND NEXT TO FIX
	CAMN U5,U5SAVE
	AOS CPOS
	MOVE	X5,CPOS		;RESET ENTRIES
	SOJG	U5,L14
	MOVE	X5,CNEG
	ADDI X5,1		;So that none will be missed
;	LSH	X5,-1
	IDIVI X5,3		;NOW 7 BUCKETS 
	MOVEM U5,U5SAVE
	MOVEM	X5,CNEG
;	MOVEI	U5,2
	MOVEI	U5,3
	SETZB	U1,U2
L14N:	MOVEI	U3,26
	PUSHJ	PDP,C2N
	CAMN U5,U5SAVE
	AOS CNEG
	MOVE	X5,CNEG
	SOJG	U5,L14N
	SKIPE	LFLAG5
	PUSHJ	PDP,TERPRI
	ADDI	K,SIGSIZ		;FOR NEXT PHASE
	ADDI	Q,SIGSIZ
	SOJGE	P,L2		;COUNT PHASES
	SKIPN	LFLAG5
	JRST	L1
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,TERPRI
	JRST	L1		;TO NEXT TABLE
;L21A L21 L22 L22A AC ACZ AC1 AC3 AC3A AC2 L25B L25BN L25C

L21A:	SKIPN	LFLAGT
	JRST	L21
	PUSHJ	PDP,TERPRI
	MOVEI	U1,[ASCIZ /FIRST-LEVEL TABLE COEF./]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,TERPRI
L21:	POP	A,K
	SKIPE	LFLAG6
	SETZM	LFLAG5
	JUMPLE	K,L31		;LAST AT THIS LEVEL
	POP	A,Q
	JUMPLE	Q,L31
	MOVEI	P,3		;T0 COUNT PHASES
L22:	SKIPN	LFLAGT
	JRST	L22A
	MOVEI	X1,16
	SETZM	TABA(X1)
	SOJGE	X1,.-1
	MOVEI	X1,6
	MOVEI	X2,6
	MOVEI	X3,6
L22A:	SETZM	CPOS
	SETZM	CNEG
	HRRM	K,AC
	HRRM	K,ACZ
	HRRM	K,AC1
	HRRM	Q,AC2
	HRRM	Q,C3P
	HRRM	Q,C3N
	HRRM	Q,C6
	HRRM	Q,C5
	MOVEI	U3,253		;COUNT ENTRIES
	MOVNM	U3,U3S
	JRST SM20		;For full smoothing
AC:	MOVE	Z,(U3)
	TDNN	Z,[200000200000]
	JRST	.+4
	LSH	Z,-1
	AND	Z,[177777177777]
ACZ:	MOVEM	Z,(U3)
	SKIPN	LFLAGT
	JRST	.+11
	ADDM	Z,TABA(X1)
	ADDM	Z,TABB(X2)
	ADDM	Z,TABC(X3)
	SOJGE	X3,.+5
	SOJGE	X2,.+3
	SUBI	X1,1
	MOVEI	X2,4
	MOVEI	X3,4
	SKIPN	LFLAG8
	JRST	AC3A
	MOVN	U1,U3
AC1:	MOVS	U2,(U1)
AC3:	LSH	U2,-1
	MOVE	U1,WEIGH2
	AND	U2,LMSKW(U1)
	ADD	Z,U2
AC3A:	HLRZ	U1,Z
	HRRZ	U2,Z
	JUMPE	Z,AC2
	SUB	U1,U2
	LSH	U2,1
	ADD	U2,U1
	ASH	U1,14		;PLENTY OF SPREAD
	MOVEM	X2,X2SAC#
	IDIV	U1,U2
	MOVE	X2,X2SAC
	SKIPLE	U1
	AOS	CPOS
	SKIPGE	U1
	AOS	CNEG
	SKIPE	U1
	ADD	U1,CORADD
AC2:	MOVEM	U1,(U3)
	SUBI	U3,1
	CAML	U3,U3S
	JRST	AC
L23:	MOVE	X5,CPOS
	ADDI X5,1		;Allows one less in 1 bucket
	IDIVI	X5,7
	MOVEM U5,U5SAVE#	;The remainder
	MOVEM	X5,CPOS
	MOVEI	U5,7
	SETZB	U1,U2		;SAFETY MEASURE
L25B:	MOVEI	U3,253
	PUSHJ	PDP,C2P		;FIND LARGEST
	CAMN U5,U5SAVE
	AOS CPOS		;Time to start accounting for remainder
	MOVE	X5,CPOS		;RESET ENTRIES
	SOJG	U5,L25B
	MOVE	X5,CNEG
	ADDI X5,1		;Allows one less 1 in 1 bucket
	IDIVI	X5,7
	MOVEM U5,U5SAVE#	;The remainder
	MOVEM	X5,CNEG
	MOVEI	U5,7
	SETZB	U1,U2
L25BN:	MOVEI	U3,253
	PUSHJ	PDP,C2N
	CAMN U5,U5SAVE
	AOS CNEG		;Time to start accounting for remainder
	MOVE	X5,CNEG
	SOJG	U5,L25BN
	SKIPN	LFLAGT
	JRST	L25C
	MOVEM	X1,X1SL25#
	TAB	TABA
	MOVEI	U1,[ASCIZ /   /]
	PUSHJ	PDP,PRINT
	TAB	TABB
	MOVEI	U1,[ASCIZ /   /]
	PUSHJ	PDP,PRINT
	TAB	TABC
	MOVE	X1,X1SL25
	PUSHJ	PDP,TERPRI
L25C:	ADDI	K,SIGSIZ
	ADDI	Q,SIGSIZ
	SOJGE	P,L22		;TO NEXT PHASE
	SKIPE	LFLAGT
	PUSHJ	PDP,TERPRI
	JRST	L21		;TO NEXT TABLE
;TRJOUT L31 L32 L34 L34Z L34A L34B L34C L35 L33 L35B L35BN

TRJOUT:	HLRZ	U1,Z
	HRRZ	U2,Z
	SUB	U1,U2
	LSH	U2,1
	ADD	U2,U1
	MOVEM	X1,X1STJ#
	MOVEM	X2,X2STJ#
	IMULI	U1,310
	IDIV	U1,U2
	TRNE	U1,1
	ADDI	U1,2
	ASH	U1,-1
	PUSHJ	PDP,RJOUT1
	MOVE	X1,X1STJ
	MOVE	X2,X2STJ
	POPJ	PDP,

L31:	MOVEI	K,SIGLF		;START THIRD LEVEL
	MOVEI	Q,SIGTF
	MOVEI	P,3
L32:	HRRM	K,L34
	HRRM	K,L34Z
	HRRM	K,L34A
	HRRM	Q,L35
	HRRM	Q,C3P
	HRRM	Q,C3N
	HRRM	Q,C5
	HRRM	Q,C6
	MOVEI	U3,160
	MOVNM	U3,U3S
	SETZM	CPOS
	SETZM	CNEG
	JRST SM30		;For full smoothing
L34:	MOVE	Z,(U3)
	TDNN	Z,[200000200000]
	JRST	.+4
	LSH	Z,-1
	AND	Z,[177777177777]
L34Z:	MOVEM	Z,(U3)
	SKIPN	LFLAG9
	JRST	L34C
	MOVN	U1,U3
L34A:	MOVS	U2,(U1)
L34B:	LSH	U2,-1
	MOVE	U1,WEIGH3
	AND	U2,LMSKW(U1)
	ADD	Z,U2
L34C:	HLRZ	U1,Z
	HLRZ	U1,Z
	JUMPE	Z,L35
	HRRZ	U2,Z
	SUB	U1,U2
	LSH	U2,1
	ADD	U2,U1
	CAIGE	U2,10
	SETZ	U1,
	ASH	U1,14		;MULTIPLY BY 4096
	IDIV	U1,U2
	SKIPLE	U1
	AOS	CPOS
	SKIPGE	U1
	AOS	CNEG
	SKIPE	U1
	ADD	U1,CORADD
L35:	MOVEM	U1,(U3)
	SUBI	U3,1		;TO NEXT PHASE
	CAML	U3,U3S
	JRST	L34
L33:	SETZ	X5,
	MOVE	U5,CPOS
	SETZB	U1,U2
L35B:	MOVEI	U3,160
	PUSHJ	PDP,C2P
	SETZ	X5,
	SOJG	U5,L35B
	SETZ	X5,
	MOVE	U5,CNEG
L35BN:	MOVEI	U3,160
	PUSHJ	PDP,C2N
	SETZ	X5,
	SOJG	U5,L35BN
	ADDI	K,SIGSIZ
	ADDI	Q,SIGSIZ
	SOJGE	P,L32
	SETZM	LFLAGT		;TERMINATE F COMMAND
	POPJ	PDP,
;C2P C3P C4P C5 C2N C3N C4N C6

C2P:	MOVEI	Z,10001		;A LARGE NO.
	MOVNM	Z,LARGE#
C3P:	MOVE	Z,(U3)
	CAMGE	Z,CORADD
	JRST	C4P		;Already processed or negative
	SUB	Z,CORADD
	JUMPLE	Z,C4P
	CAMG	Z,LARGE
	JRST	.+3
	MOVEM	Z,LARGE		;SAVE IF LARGER
	MOVE	U1,U3		;SAVE INDEX
C4P:	SUBI	U3,1
	CAML	U3,U3S
	JRST	C3P
	SKIPLE	LARGE
C5:	MOVEM	U5,(U1)		;QUANTIZE
	SOSG	X5
	POPJ	PDP,
	SOS	(PDP)
	SOS	(PDP)
	POPJ	PDP,

C2N:	MOVEI	Z,10001		;A LARGE NO.
	MOVEM	Z,SMALL#
C3N:	MOVE	Z,(U3)
	CAMGE	Z,CORCOM
	JRST	C4N		;ALREADY PROCESSED
	SUB	Z,CORADD
	JUMPGE	Z,C4N
	CAML	Z,SMALL
	JRST	.+3
	MOVEM	Z,SMALL		;SAVE IF SMALLER 
	MOVE	U2,U3		;SAVE INDEX
C4N:	SUBI	U3,1
	CAML	U3,U3S
	JRST	C3N
	SKIPGE	SMALL
C6:	MOVNM	U5,(U2)		;QUANTIZE
	SOSG	X5
	POPJ	PDP,
	SOS	(PDP)
	SOS	(PDP)
	POPJ	PDP,
;CORCOM CORADD WEIGH1 WEIGH2 WEIGH3 WEIGHT LMSKW LRNPDL

CORCOM:	300000000000
CORADD:	377000000000

WEIGH1:	1
WEIGH2:	1
WEIGH3:	1
WEIGHT:	6
LMSKW:	777777777777
	377777377777
	177777177777
	077777077777
	037777037777
	017777017000
	007777007777
	003777003777
	001777001777
	000777000777
	000377000377
	000177000177
	000077000077
	000037000037
	000017000017
	000007000007
	000003000003
	000001000001
	000000000000
	Z
	Z
	SIGT22
	SIGL22
	SIGT21
	SIGL21
	Z
	SIGT16
	SIGL16
	SIGT15
	SIGL15
	SIGT14
	SIGL14
	SIGT13
	SIGL13
	SIGT12
	SIGL12
	SIGT11
LRNPDL:	SIGL11
;LRJOUT LZ RJOUT1 RJOUT2 RJ2A RJOUT3 LDEPTH KDEPTH LFLAG1 LFLAGZ LFLAG2 LFLAG3 LFLAG5 LFLAG6 LFLAG7 LFLAG8 LFLAG9 TRUNKF SMOOTH SMFAZE PRNVAR DORM DSKTAP TRMA TRMB TRMC TABA TABB TABC

LRJOUT:	HLRZ	U1,Z
	HRRZ	U2,Z
	SUB	U1,U2
	LSH	U2,1
	ADD	U2,U1
	MOVEM	X1,X1S
	MOVEM	X2,X2S
	IMULI	U1,310		;MULTIPLY BY 200
	SKIPN	LFLAG5
	JRST	.+6
	MOVEM	U1,U1S#
	IMULI	U1,5
	IDIV	U1,TRMAT
	PUSHJ	PDP,RJOUT3
	MOVE	U1,U1S
	IDIV	U1,U2		;WARNING DISTROYS X2
	TRNE	U1,1
	ADDI	U1,2
	ASH	U1,-1		;DIVIDE BY 2
	PUSHJ	PDP,RJOUT2
	SKIPN	LFLAG5
	JRST	.+3
	MOVE	U1,U2
	PUSHJ	PDP,RJOUT
	MOVE	X1,X1S
	MOVE	X2,X2S
	POPJ	PDP,

LZ:	MOVEM	X2,X2S
	MOVEM	X1,X1S
	MOVEI	U1,[ASCIZ /TRM OVERFLOW /]
	PUSHJ	PDP,PRINT
	MOVE	U1,X1S
	PUSHJ	PDP,NUMOUT
	MOVE	U1,X2S
	PUSHJ	PDP,NUMOUT
	MOVE	U1,X3
	PUSHJ	PDP,NUMOUT
	PUSHJ	PDP,TERPRI
	MOVE	X1,X1S
	MOVE	X2,X2S
	POPJ	PDP,

RJOUT1:	SETZ	X2,
	SKIPGE	U1
	SOS	X2
	MOVM	Z,U1
	JRST	RJ2

RJOUT2:	SETZ	X2,
	SKIPGE	U1
	SOS	X2		;SPACE FOR - SIGN
	MOVM	Z,U1
RJ2A:	SKIPE	LFLAG5
	JRST	RJ2
	POPJ	PDP,

RJOUT3:	SETZ	X2,
	SKIPGE	U1
	SOS	X2
	MOVM	Z,U1
	JRST	RJ4

LDEPTH:	0		;LEARNING DEPTH CONTROL
KDEPTH:	3		;SECOND DEPTH CONTROL NUMBER
LFLAG1:	1		;NON-ZERO TO SAVE LINEARIZE
LFLAGZ:	1		;LINEARIZE
LFLAG2:	1		;TO LINEARIZE SIG
LFLAG3:	Z		;TO LINEARIZE LRN
LFLAG5:	Z
LFLAG6:	Z
LFLAG7:	1
LFLAG8:	1
LFLAG9:	1
TRUNKF:	0
SMOOTH:	Z
SMFAZE:	1
PRNVAR:	0
DORM:	Z		;NOT 0 TO SAVE PLOT DATA
DSKTAP:	Z		;0 FOR DSK AT START
TRMA:	BLOCK	3
TRMB:	BLOCK	3
TRMC:	BLOCK	5

TABA:	BLOCK	5
TABB:	BLOCK	5
TABC:	BLOCK	5
;TOTALS TOTAL2 SYM SYM0 SYM1 SYM2 SYM3 SYM4 SYM5 SYM6 SYM10 SYMPDL

TOTALS:	MOVEI	U1,[ASCIZ / TOTALS /]
	PUSHJ	PDP,PRINT
	MOVE	U1,LABELD+1
	IDIVI	U1,↑D1000
	PUSHJ	PDP,RJOUT1
	MOVEI	P,SIGSIZ*3
TOTAL2:	MOVE	U2,LABEL+2(P)
	ADDM	U2,TLOW
	ADD	U2,LABEL+4(P)
	ADD	U2,LABEL+3(P)
	MOVE	U1,LABEL+3(P)
	ASH	U1,-1
	ADD	U1,LABEL+2(P)
	IMULI	U1,144
	IDIV	U1,U2
	PUSHJ	PDP,RJOUT3
	MOVE	U1,LABEL+3(P)
	ADDM	U1,TEQUAL
	IMULI	U1,144
	IDIV	U1,U2
	PUSHJ	PDP,RJOUT1
	MOVE	U1,LABEL+4(P)
	ADDM	U1,THIGH
	SUBI	P,SIGSIZ
	JUMPGE	P,TOTAL2
	MOVE	U1,LABEL+1
	PUSHJ	PDP,RJOUT3
	MOVE	U2,TEQUAL
	MOVE	U1,U2
	ADD	U2,TLOW
	ADD	U2,THIGH
	ASH	U1,-1
	ADD	U1,TLOW
	IMULI	U1,144
	IDIV	U1,U2
	PUSHJ	PDP,RJOUT3
	MOVE	U1,TEQUAL
	IMULI	U1,144
	IDIV	U1,U2
	PUSHJ	PDP,RJOUT1
	PUSHJ	PDP,TERPRI
	SETZM	THIGH
	SETZM	TLOW
	SETZM	TEQUAL
	MOVEI	P,SIGSIZ*3
	MOVEI	U1,[ASCIZ /      MOVES /]
	PUSHJ	PDP,PRINT
	MOVE	U1,LABEL+2(P)
	ADD	U1,LABEL+3(P)
	ADD	U1,LABEL+4(P)
	PUSHJ	PDP,RJOUT
	MOVEI	U1,[ASCIZ /   /]
	PUSHJ	PDP,PRINT
	SUBI	P,SIGSIZ
	JUMPGE	P,.-6
	PUSHJ	PDP,TERPRI
	POPJ	PDP,
;SUBROUTINE TO SYMETRICALLY SMOOTH LEARNING DATA
SYM:	MOVE	A,[XWD -1,SYMPDL]
SYM0:	POP	A,K
	JUMPE	K,SYM10
	POP	A,U2
	MOVEI	P,3
SYM1:	HRRM	K,SYM3
	HRRM	K,SYM4
	HRRM	K,SYM5
	HRRM	K,SYM6
	MOVE	U3,U2
SYM2:	MOVN	U1,U3
SYM3:	MOVS	Z,(U1)
SYM4:	ADD	Z,(U3)
	LSH	Z,-1
	AND	Z,LMSKW+1
SYM5:	MOVEM	Z,(U3)
SYM6:	MOVSM	Z,(U1)
	SUBI	U3,1
	JUMPGE	U3,SYM2
	ADDI	K,SIGSIZ
	SOJGE	P,SYM1
	JRST	SYM0
SYM10:	POPJ	PDP,

	Z
	Z
	160
	SIGLF
	253
	SIGL22
	253
	SIGL21
	26
	SIGL16
	26
	SIGL15
	26
	SIGL14
	26
	SIGL13
	26
	SIGL12
	26
SYMPDL:	SIGL11
;FACTOR FACTO2 FACTO3 DIVIDE DIVMSK DIVIDT

FACTOR:	SETZB	U2,U3
	MOVEI	U4,LRN11
FACTO2:	MOVEI	U1,SIGSIZ-6	;ALLOW FOR LABEL OF 5
	HRRM	U4,.+2
	HRRM	U4,.+3
	HLRZ	Z,LRN11(U1)
	ADD	U2,Z
	HRRZ	Z,LRN11(U1)
	ADD	U3,Z
	SOJGE	U1,.-4
	ADDI	U4,SIGSIZ
	CAIGE	U4,LRN11+SIGSIZ*4
	JRST	FACTO2
	IMULI	U3,144
	IDIV	U3,U2
	SKIPN	TRUNKF
	JRST	.+6
	MOVEI	U1,[ASCIZ /FACTOR IS /]
	PUSHJ	PDP,PRINT
	MOVE	U1,U3
	PUSHJ	PDP,NUMOUT
	PUSHJ	PDP,TERPRI
	MOVE	U4,LRN11
FACTO3:	MOVEI	U1,SIGSIZ-6
	HRRM	U4,.+2
	HRRM	U4,.+4
	HLLZ	U2,LRN11(U1)
	IDIVI	U2,144
	IMUL	U2,U3
	HLLM	U2,LRN11(U1)
	SOJGE	U1,.-4
	ADDI	U4,SIGSIZ
	CAIGE	U4,LRN11+SIGSIZ*4
	JRST	FACTO3
	POPJ	PDP,

DIVIDE:	MOVEI	U4,LRN11
	MOVE	U2,DIVMSK
	MOVEI	U1,SIGSIZ-6
	HRRM	U4,.+2
	HRRM	U4,.+5
	MOVE	Z,LRN11(U1)
	LSH	Z,-1
	AND	Z,U2
	TDNE	Z,[777000777000]	;DO NOTHING IF SMALL
	MOVEM	Z,LRN11(U1)
	SOJGE	U1,.-5
	ADDI	U4,SIGSIZ
	CAIGE	U4,LRN11+SIGSIZ*4
	JRST	.-13
	MOVEI	U1,[ASCIZ /TABLES HALVED/]
	PUSHJ	PDP,PRINT
	JRST	TERPRI
DIVMSK:	177777177777

DIVIDT:	MOVE	U2,[200000400000]
	MOVEI	U4,LRN11
	MOVEI	U1,SIGSIZ-6
	HRRM	U4,.+1
	MOVE	Z,LRN11(U1)
	AND	Z,U2
	JUMPN	Z,.+6
	SOJGE	U1,.-3
	ADDI	U4,SIGSIZ
	CAIGE	U4,LRN11+SIGSIZ*4
	JRST	.-10
	POPJ	PDP,
	MOVEI	U1,[ASCIZ /TIME TO DIVIDE/]
	PUSHJ	PDP,PRINT
	JRST	TERPRI
;LZERO ZL LC LC2 LC3 LC3A LC4 LC5 LC6 LC6A LC7 LC10 LC20

	;TYPING OF LEARN COMMAND WILL SET LFLAG AND
	;GO TO BEGIN

	;TYPING OF LEARN, ZERO, TABLES WILL ZERO ALL 
	;LEARNING TABLES AND BRANCH TO ABOVE COMMAND
	;INTERPRETATION.

LZERO:	SETZM	LABELD
	MOVE	Z,[XWD	LABELD,LABELD+1]
	BLT	Z,LABELD+SIGSIZ*4-1
	POPJ	PDP,

LZER2:	MOVEI U1,LRN21+SIGSIZ*3
	MOVEI U2,LABELD+SIGSIZ*4-1
	MOVEI U3,3
LZER2A:	HRRZI Z,1(U1)
	HRL Z,U1
	SETZM @U1
	BLT Z,@U2
	SUBI U1,SIGSIZ
	SUBI U2,SIGSIZ
	SOJGE U3,LZER2A
	POPJ PDP,

LZER3:	MOVEI U1,LRNF+SIGSIZ*3
	MOVEI U2,LABELD+SIGSIZ*4-1
	MOVEI U3,3
LZER3A:	HRRZI Z,1(U1)
	HRL Z,U1
	SETZM @U1
	BLT Z,@U2
	SUBI U1,SIGSIZ
	SUBI U2,SIGSIZ
	SOJGE U3,LZER2A
	POPJ PDP,

ZL:	MOVEI	U5,4
	SETZM	LABELD(U5)
	SETZM	LABEL(U5)
	SETZM	LABEL+SIGSIZ(U5)
	SETZM	LABEL+SIGSIZ*2(U5)
	SETZM	LABEL+SIGSIZ*3(U5)
	SOJGE	U5,.-5
	POPJ	PDP,

;THIS SHOULD BE FIXED TO WRITE OUT A FILE.*********
LC:	POPJ	PDP,		;3 APR 80 FORM BYPASS
;LC7SAV LC7SAE LASCIZ TTNMVS TTNBDS TNOBDS TNOMVS

LC7SAV:	Z		;TO SAVE ASCIZ 
LC7SAE:	Z		;DITTO

LASCIZ:	ASCIZ /00/
	ASCIZ /01/
	ASCIZ /02/
	ASCIZ /03/
	ASCIZ /04/
	ASCIZ /05/
	ASCIZ /06/
	ASCIZ /07/
	ASCIZ /08/
	ASCIZ /09/
	ASCIZ /10/
	ASCIZ /11/
	ASCIZ /12/
	ASCIZ /13/
	ASCIZ /14/
	ASCIZ /15/
	ASCIZ /16/

TTNMVS:	Z	;TOTAL NUMBER OF  2 MOVE BOARDS
TTNBDS:	Z	;TOTAL NUMBER OF BOARDS
TNOBDS:	Z	;BOARDS FOR THIS FILE
TNOMVS:	Z	;NUMBER OF TWO MOVE BOARDS

;EVA LEV1 CFC CFA1 CFA3 PHASAD PHASES NEG

	SUBTTL	MACROS FOR SIGNATURE TABLES
U1SAVE:	0
U2SAVE:	0
X1SAVE:	0


	DEFINE	MAC1	(S)	<;OUTER MACRO
		SETZ	U1,
		MAC2	\<3*S-2>
		IMULI	U1,7
		MAC2	\<3*S-1>
		IMULI	U1,7
		MAC2	\<3*S>
		ADD	U1,PHASAD
		SKIPE	LFLAG
		ADDM	X1,SIGL2'S(U1)
		ADD	U5,SIGT2'S(U1)>

	DEFINE	MAC2	(SC)	<;CENTRAL MACRO
		MAC3	1
		MOVE	U2,Q
		IMULI	U2,3
		MAC3	1
		ADD	U2,Q
		IMULI	U2,5
		MAC3	2
		ADD	U2,Q
		ADD	U2,PHASAD
		SKIPN	LFLAG
		JRST	.+5
		MOVE	Z,SIGT1'SC(U2)
		MOVE	U3,SI
		MOVEM	Z,SIGZ1'SC(U3)
		ADDM	X1,SIGL1'SC(U2)
		ADD	U1,SIGT1'SC(U2)>

	DEFINE	MAC3	(C)	<;INNER MACRO
		SETZB	Q,P
		LSHC	Q,4
		LSHC	P,4
		SUB	Q,P
		CAILE	Q,C
		MOVEI	Q,C
		CAMGE	Q,NEG+C
		MOVNI	Q,C>

EVA:	POPJ	PDP,		; CKLY


;SIGSIZ=1356		;SIZE OF SIG+LABEL IS 750
SIGSIZ=2406		;SIZE OF SIG+LABEL IS 1286
PHASAD:	Z

PHASES:	0
	SIGSIZ
	SIGSIZ*2
	SIGSIZ*3

NEG:	0		;NEGATION TABLE
	-1
	-2
	-3
	-4
	-5
	-6
	-7
	-10

;DSAVE RSAVE

DSAVE:	MOVEI	U1,[ASCIZ /DSAVE HERE/]
	PUSHJ	PDP,PRINT
	POPJ	PDP,		;3 APR 80 FORM BYPASS

RSAVE:	MOVEI	U1,[ASCIZ /RSAVE HERE/]
	PUSHJ	PDP,PRINT
	POPJ	PDP,	;3 APR 80 FORM BYPASS
;DFILL DFILL2 DSKERR DATA RDATA

DFILL:	POPJ	PDP,			;3 APR 80 FORM BYPASS
DATA:	SIXBIT	/LEARN/
	SIXBIT	/ING/
	055000000000
	SIXBIT	/  1ALS/

RDATA:	SIXBIT	/LEARN/
	SIXBIT	/DAT/
	055000000000
	SIXBIT	/  1ALS/
;MTAOUT SIGDAT SIGT0 SIGT1 SIGT2 SIGT3 CFZ1 CFZ2 CFZ3 CFZ4 CFZ5 CFZ10 CFZ11 CEMPTY LABEL EVAL11 SIGT11 EVAL12 SIGT12 EVAL13 SIGT13 EVAL14 SIGT14 EVAL15 SIGT15 EVAL16 SIGT16 EVAL21 SIGT21 EVAL22 SIGT22 EVALF SIGTF LABELD LRN11 SIGL11 LRN12 SIGL12 LRN13 SIGL13 LRN14 SIGL14 LRN15 SIGL15 LRN16 SIGL16 LRN21 SIGL21 LRN22 SIGL22 LRNF SIGLF

MTAOUT:	IOWD	SIGSIZ*4,LABELD
	Z

SIGDAT:	SIXBIT /SIGT0/
	SIXBIT	/DAT/
	055000000000
	SIXBIT	/  1ALS/

SIGT0:	IOWD	SIGSIZ,LABEL
	Z
SIGT1:	IOWD	SIGSIZ,LABEL+SIGSIZ
	Z
SIGT2:	IOWD	SIGSIZ,LABEL+SIGSIZ*2
	Z
SIGT3:	IOWD	SIGSIZ,LABEL+SIGSIZ*3
	Z

	SUBTTL	DATA FOR EVALUATION 

CFZ1:	Z	;TEMPORARY STORAGE
CFZ2:	Z
CFZ3:	Z
CFZ4:	Z
CFZ5:	Z
CFZ10:	Z	;BACKUP LOCATION FOR PASK
CFZ11:	Z	;BACKUP LOCATION FOR ACTK
CEMPTY:	Z	;TEMPORARY LOCATION FOR EMPTY, ET.AL.

LABEL:	BLOCK	5
EVAL11:	BLOCK	26	;SIGNATURE TABLES
SIGT11:	BLOCK	27	;LABEL IS CENTERED IN TABLE TO ALLOW NEGATIVE SUBSCRIPTS
EVAL12:	BLOCK	26
SIGT12:	BLOCK	27
EVAL13:	BLOCK	26
SIGT13:	BLOCK	27
EVAL14:	BLOCK	26
SIGT14:	BLOCK	27
EVAL15:	BLOCK	26
SIGT15:	BLOCK	27
EVAL16:	BLOCK	26
SIGT16:	BLOCK	27
EVAL21:	BLOCK	253
SIGT21:	BLOCK	254
EVAL22:	BLOCK	253
SIGT22:	BLOCK	254
EVALF:	BLOCK	160
SIGTF:	BLOCK	161
	BLOCK	SIGSIZ*3		;SPACE FOR OTHER PHASES

LABELD:	BLOCK	5		;TO BALANCE LABEL
LRN11:	BLOCK	26	;LEARNING TABLES
SIGL11:	BLOCK	27
LRN12:	BLOCK	26
SIGL12:	BLOCK	27
LRN13:	BLOCK	26
SIGL13:	BLOCK	27
LRN14:	BLOCK	26
SIGL14:	BLOCK	27
LRN15:	BLOCK	26
SIGL15:	BLOCK	27
LRN16:	BLOCK	26
SIGL16:	BLOCK	27
LRN21:	BLOCK	253
SIGL21:	BLOCK	254
LRN22:	BLOCK	253
SIGL22:	BLOCK	254
LRNF:	BLOCK	160
SIGLF:	BLOCK	161
	BLOCK	SIGSIZ*3		;SPACE FOR OTHER PHASES

LABEL1=LABEL+SIGSIZ
LABEL2=LABEL+SIGSIZ*2
LABEL3=LABEL+SIGSIZ*3
LABLD1=LABELD+SIGSIZ
LABLD2=LABELD+SIGSIZ*2
LABLD3=LABELD+SIGSIZ*3

;BLOWUP INPSIZ BOKSIZ INPMAX INPCNT INPKNK SAVMOV SAVM0 SAVM1 SAVMZ PADMOV PADMO2 INDEXS INDEXX INDEXA INDEXP INDEXK INDEXF INDEXC INDEXL INDEXV INDXV2 SIXADD SIXPT2 SIXPT3 SIXPNT SIXOUT
;The general scheme is to maintain an INDEX  table relating the initial entries in
;files of saved board and move data with the file names via an index value to be
;used with the INDEX table. These entries are label-sorted so as to minimize the
;amount of file shifting that will be necessary when the table of BOOKM's is
;emptied into the files.
;INPSIZ is 10240 allowing 2048 king records or 2560 entries of no-king records
;on DMPFIL, however, if INPCNT>8960 then the file is split into two halves so that
;the actual size of the files will vary from 4480 to 8960

BLOWUP==↑D10		;RELATIVE SIZE OF INPSIZ IN L AND P
INPSIZ==↑D1024*BLOWUP	;INPSIZ=↑D1020 IN CKP
BOKSIZ=↑D128		;2**N FOR CONVENIENCE (INCREASE TO 512 AS SOON AS TESTED)
INPMAX==↑D896*BLOWUP	;MAX SIZE ALLOWED ON DMPFIL
INPCNT:	Z		;Current count of words occupied
INPKNK:	Z		;King or no-king record for filein
;When BOOK file is filled go to MERGE then to INSERT
;In INSERT at INS1A if INPCNT<INPMAX return to SAVMOV else go to DIVFI

SAVMOV:
	AOS	X3,BINDEX	;BINDEX used to index BOOK data
	MOVE	A,PLA
	MOVE	P,PLP
	MOVE	K,PLK
	MOVEI	Z,1
	SKIPN	K
	AOS	Z		;ADD 1 IF NO KINGS ON BOARD
	SKIPE	COLOR		;COLOR HAS ALREADY BEEN CHANGED
	ADDI	Z,2		;ADD 2 IF BLACK TO MOVE
	SETZ	U2,
SAVM0:
	CAMG	Z,INDEXX+1(U2)	;Initial classification on kings and color
	AOJA	U2,SAVM0	;in decreasing order
;	CAME	Z,INDEXX+1(U2)
;	JRST	SAVM1
;	CAMGE	A,INDEXA+1(U2)	;then on A again in decreasing order
;	AOJA	U2,SAVM0
;	CAME	A,INDEXA+1(U2)
;	JRST	SAVM1
;	CAMGE	P,INDEXP+1(U2)	; then on P
;	AOJA	U2,SAVM0
;	CAME	P,INDEXP+1(U2)
;	JRST	SAVM1
;	CAMGE	K,INDEXK+1(U2)	;and finally on K (this may never be necessary)
;	AOJA	U2,SAVM0
;	CAMG	K,INDEXK+1(U2)
;	AOJA	U2,SAVM0
SAVM1:	HRLZS	U2		;Save index value as applied to the INDEX table
	HRR	U2,X3
	MOVEM	U2,BOOKI(X3)	;Index to INDEXM file in left and BINDEX in right

;	HLRZ	U1,A
;	PUSHJ	PDP,OCTOUT
;	HRRZ	U1,A
;	PUSHJ	PDP,OCTOUT
;	HLRZ	U1,P
;	PUSHJ	PDP,OCTOUT
;	HRRZ	U1,P
;	PUSHJ	PDP,OCTOUT

	MOVEM	A,BOOKA(X3)
	MOVEM	P,BOOKP(X3)
	MOVEM	K,BOOKK(X3)
	HLRZ	Z,BOOKMS
	LSH	Z,6
	IOR	Z,BOOKMS
	HRRZM	Z,BOOKM(X3)	;SAVE MOVE

	MOVE	U2,[POINT 7,BOOKM(X3)]
	MOVE	U1,TRNKNO
	IDPB	U1,U2
	MOVE	U1,VARNAM
	IDPB	U1,U2
	MOVE	U1,MOVNUM
	IDPB	U1,U2


	CAIGE	X3,BOKSIZ-1
	POPJ	PDP,
SAVMZ:	MOVEM	X2,X2MS#	;SAVE VALUES
	MOVEM	X4,X4MS#
	PUSHJ	PDP,MERGE
	MOVE	X2,X2MS		;RESTORE FORMER VALUES
	MOVE	X4,X4MS
	POPJ	PDP,


PADMOV:	CAIL	X3,BOKSIZ-1
	JRST	SAVMZ
	MOVEI	U1,INDEXS
	HRLZ	U2,U1
PADMO2:	AOS	X3,BINDEX
	HRR	U2,X3
	MOVEM	U2,BOOKI(X3)	;Pad out BOOK so merge will work
	SETZM	BOOKA(X3)
	SETZM	BOOKP(X3)
	CAIGE	X3,BOKSIZ-1
	JRST	PADMO2
	MOVEI	U1,[ASCIZ / PADMOV /]
	PUSHJ	PDP,PRINT
	JRST	SAVMZ

INDEXS==↑D170			;Maximum number of files
INDEXX:	4			;Black without kings
	3			;Black with kings
	2			;White without kings
	1			;White with kings
	0			;PADMOV and XEROX signal
	BLOCK	INDEXS-1	;4=BM	3=WM	2=BK	1=WK	0=time to stop
INDEXA:	377377377377		;dummy to MARK BR0001 file
	377377377377		;dummy to start BR0002 file
	377377377377
	377377377377
	377377377377
	BLOCK	INDEXS-1	,ACTIVE MEN
INDEXP:	377377377377
	377377377377
	377377377377
	377377377377
	377377377377
	BLOCK	INDEXS-1	;PASSIVE
INDEXK:	0
	377377377377
	0
	377377377377
	377377377377
	BLOCK	INDEXS-1	;KINGS
INDEXF:	SIXBIT /BR0001/
	SIXBIT /BR0002/
 	SIXBIT /BR0003/	
 	SIXBIT /BR0004/
	Z
	BLOCK	INDEXS-1	;Additional file names in SIXBIT
INDEXC:	Z			;Current size of this file
	Z
	Z
	Z
	BLOCK	INDEXS
	BLOCK	7		;GUARD
INDEXL:	SIXBIT /BR0004/		;The last used file name
INDEXV:	Z			;Index table index for FILEIN
INDXV2:	Z			;INDEX table index value (corresponding to FILEI2)


SIXADD:	MOVEI	U5,5
SIXPT2:	LDB	X1,SIXPNT(U5)
	AOS	X1
	CAIG	X1,[SIXBIT /     9/]
	JRST	SIXPT3
	MOVEI	X1,[SIXBIT /     0/]
	DPB	X1,SIXPNT(U5)
	SOJGE	U5,SIXPT2
SIXPT3:	DPB	X1,SIXPNT(U5)
	POPJ	PDP,

SIXPNT:	POINT	6,U1,5
	POINT	6,U1,11
	POINT	6,U1,17
	POINT	6,U1,23
	POINT	6,U1,29
	POINT	6,U1,35

SIXOUT:	SETZ	X1,
	LSHC	X1,6
	PUSHJ	PDP,TYPE
	SETZ	X1,
	LSHC	X1,6
	PUSHJ	PDP,TYPE
	SETZ	X1,
	LSHC	X1,6
	PUSHJ	PDP,TYPE
	SETZ	X1,
	LSHC	X1,6
	PUSHJ	PDP,TYPE
	SETZ	X1,
	LSHC	X1,6
	PUSHJ	PDP,TYPE
	SETZ	X1,
	LSHC	X1,6
	PUSHJ	PDP,TYPE
	POPJ	PDP,

;MERGE MER0 MER1 MER2 MER3 MER4 MER5 MER6 MER7 MER8 PLACE BINDEX

MERGE:	MOVMS	PLACE
	SETOM	BINDEX
	MOVEI	U1,[ASCIZ /
Merge
/]
	PUSHJ	PDP,PRINT
	MOVEI	Z,1
	MOVEI	X3,BOKSIZ
MER0:	SUB	X3,Z
	SKIPL	PLACE
	JRST	.+3
	CAIG	X3,BOKSIZ
	JRST	MER8
	JUMPLE	X3,MER8			;25 Was JUMPLE	X3,MER8
	MOVE	U1,BOOKI(X3)
	MOVE	U3,BOOKI-1(X3)		;25
	HLLZ	X4,U1
	HLLZ	X5,U3
	CAMN	X4,X5			;25
	JRST	.+4			;25
	CAMG	X4,X5			;25
	JRST	MER6			;25
	JRST	MER1			;25
	HRRZ	X4,U1
	HRRZ	X5,U3

	JUMPL	X4,MER0A
	JUMPGE	X5,MER0B
MER0A:	CAMG	U1,U3
	JRST	MER6
	JRST	MER1
MER0B:	CAIGE	X4,BOKSIZ
	CAIL	X5,BOKSIZ
	JRST	MER0A

	MOVE	U5,BOOKA(X4)		;25
	CAMN	U5,BOOKA(X5)		;25
	JRST	.+4			;25
	CAMLE	U5,BOOKA(X5)		;25
	JRST	MER6			;25
	JRST	MER1			;25
	MOVE	U5,BOOKP(X4)		;25
	CAMLE	U5,BOOKP(X5)		;25
	JRST	MER6			;25
MER1:	MOVE	X1,X3
	SUB	X1,Z
	MOVEM	X3,STOP1#
	MOVEM	X3,STOP2#
	ADDM	Z,STOP2
	MOVE	U4,X1
	ADD	U4,PLACE
MER2:	MOVE	U3,BOOKI(X1)		;25
	HLLZ	X4,U1
	HLLZ	X5,U3
	CAMN	X4,X5			;25
	JRST	.+4			;25
	CAMG	X4,X5			;25
	JRST	MER2A			;25
	JRST	MER2B			;25
	HRRZ	X4,U1
	HRRZ	X5,U3

	JUMPL	X4,MRE2C
	JUMPGE	X5,MER2D
MRE2C:	CAMG	U1,U3
	JRST	MER2A
	JRST	MER2B
MER2D:	CAIGE	X4,BOKSIZ
	CAIL	X5,BOKSIZ
	JRST	MRE2C

	MOVE	U5,BOOKA(X4)		;25
	CAMN	U5,BOOKA(X5)		;25
	JRST	.+4			;25
	CAMLE	U5,BOOKA(X5)		;25
	JRST	MER2A			;25
	JRST	MER2B			;25
	MOVE	U5,BOOKP(X4)		;25
	CAMLE	U5,BOOKP(X5)		;25
MER2A:	AOSA	X1
MER2B:	AOSA	X3
	MOVE	U1,BOOKI-1(X1)
	MOVEM	U1,BOOKI(U4)
	MOVE	U1,BOOKI(X3)
	CAML	X1,STOP1
	AOJA	U4,MER4
	CAMGE	X3,STOP2
	AOJA	U4,MER2
MER3:	ADDI	U4,1
	MOVE	U1,BOOKI(X1)
	MOVEM	U1,BOOKI(U4)
	ADDI	X1,1
	CAML	X1,STOP1
	JRST	MER5
	AOJA	U4,MER3+1

MER4:	MOVE	U1,BOOKI(X3)
	MOVEM	U1,BOOKI(U4)
	ADDI	X3,1
	CAMGE	X3,STOP2
	AOJA	U4,MER4
MER5:	MOVE	X3,STOP1
	SUB	X3,Z
	JRST	MER0

MER6:	MOVEI	U2,BOOKI(X3)
	SUB	U2,Z
	HRLS	U2
	ADD	U2,PLACE
	HRRM	U2,MER7
	ADDM	Z,MER7
	ADDM	Z,MER7
	SOS	MER7
MER7:	BLT	U2,
	SUB	X3,Z
	JRST	MER0

MER8:	LSH	Z,1
	CAIL	Z,BOKSIZ
	JRST	INSERT
	MOVEI	X3,BOKSIZ
	SKIPL	PLACE
	ADD	X3,PLACE
	MOVNS	PLACE
	JRST	MER0

PLACE:	BOKSIZ
BINDEX:	-1		;SAVMOV COUNT
;INSERT INS1 INS1A INS1B INS1C INS2 INS3 INSL INSL1 INSG INSG1 INSG2 OUTBLK OUTBA OUTBP OUTBM OUTBK

; Q indexes INPA 		range 0 : INPSIZ-1
; X3 sorted index into BOOKA	range 0 : BOKSIZ-1
; X4 indexes into label sort,	range 0 : BOKSIZ-1
; X5 index for OUTBLK,		range 0 : INPSIZ-1
; U1 reserved for printing and output
; U2 contains current BOOKA(X3), also used for FILEIN
; U3 contains current BOOKP(X3)
; U4 contains current BOOKK(X3)

INSERT:	MOVEI	U1,[ASCIZ / INSERT /]
	PUSHJ	 PDP,PRINT
	SETZB	Q,X5		;Used to index INPA and OUTBLK
	SETOM	FILEIN		;To guarentee mismatch the first time
	SETZB	Q,INPCNT
	MOVEI	X4,BOKSIZ-1
INS1:
;	SETZM	FILEI2		;To guarentee smooth exit if BOOK is exhausted
	JUMPL	X4,INS1A	;No more BOOK 
	HLRZ	U1,BOOKI(X4)	;Get index to INDEXF table
	SKIPL	PLACE		;Is this the right one?
	HLRZ	U1,BOOKI+BOKSIZ(X4);Get index to INDEF table
	MOVEM	U1,INDXV2	;Save new INDEX table index value
	MOVE	U2,INDEXF(U1)	;and retrieve the correct file name
	CAMN	U2,FILEIN	;IS correct file already in core?
	JRST	INS2		;Yes
	MOVEM	U2,FILEI2	;Save new value
	JUMPLE	X5,INS1C	;Bypass DMPFIL first time through
INS1A:	CAML	Q,INPCNT
	JRST	INS1B
	MOVE	Z,INPA(Q)
	MOVEM	Z,OUTBLK(X5)
	AOS	Q
	AOJA	X5,INS1A

INS1B:	MOVEM	X5,INPCNT	;Update INPCNT for DMPFIL
	MOVE	U1,INDEXV
	MOVEM	X5,INDEXC(U1)
	SETZM	OUTBLK(X5)	;Restore guard
	MOVEI	U1,[ASCIZ /
DMP X5=/]
	PUSHJ	PDP,PRINT
	MOVE	U1,X5
	PUSHJ	PDP,NUMOUT
	ADDI	X5,2		;Guard word fore and aft
	MOVNS	X5
	HRLM	X5,BKMIN
	PUSHJ	PDP,DMPFIL	;Dump current file
	JUMPGE	X4,INS1C	;Is there more BOOK?
	SETOM	BINDEX		;To be ready for the next lot
	POPJ	PDP,		;We are through
INS1C:	MOVE	U1,FILEI2	;U2 changed in DMPFIL
	PUSHJ	PDP,SIXOUT
	SKIPN	FILEI2		;Have we gone too far?
	POPJ	PDP,
	SETZB	Q,X5		;Used to index INPA and OUTBLK
	SETZM	INPA(Q)		;Guard in case there is no input file
	PUSHJ	PDP,GETFIL	;AND GET NEW FILE
	JRST	.+1
	MOVEI	U1,[ASCIZ / New INPCNT=/]
	PUSHJ	PDP,PRINT
	MOVE	U1,INDXV2
	MOVEM	U1,INDEXV
	MOVE	U2,INDEXK(U1)
	MOVEM	U2,INPKNK	;0=no kings, -1=kin
	MOVE	U2,INDEXC(U1)
	MOVEM	U2,INPCNT	;Get new INPCNT
	MOVE	U1,U2
	PUSHJ	PDP,NUMOUT
	PUSHJ	PDP,TERPRI
INS2:
	HRRZ	X3,BOOKI(X4)	;GET INDEX
	SKIPL	PLACE		;BUT GET THE RIGHT ONE!	;M25 WAS SKIPL
	HRRZ	X3,BOOKI+BOKSIZ(X4)	;INDICES UNORDERED SINCE LABEL SORT
	MOVE	U2,BOOKA(X3)
	MOVE	U3,BOOKP(X3)
	MOVE	U4,BOOKK(X3)
	SKIPN	U2,BOOKA(X3)
	JRST	INS1A		;This shouldn't happen
INS3:	CAML	Q,INPCNT	;Any more INPA?
	JRST	INSG		;No
	CAMGE	U2,INPA(Q)
	JRST	INSL
	CAME	U2,INPA(Q)
	JRST	INSG		;BOOK goes next but test against OUTBLK-1
	CAMLE	U3,INPP(Q)
	JRST	INSG
	SKIPN	INPKNK		;Are kings expected?
	JRST	INSL		;No, treat equal as less than
	CAME	U3,INPP(Q)
	JRST	INSL
	CAMLE	U4,INPK(Q)	;Treat equal as less than
	JRST	INSG		;Must be greater than
INSL:
;	MOVEI	U1,[ASCIZ /L /]
;	PUSHJ	PDP,PRINT
;	MOVE	U1,Q
;	PUSHJ	PDP,NUMOUT
;	MOVEI	U1,[ASCIZ / /]
;	PUSHJ	PDP,PRINT
;	MOVE	U1,X5
;	PUSHJ	PDP,NUMOUT
;	MOVEI	U1,[ASCIZ / 	/]
;	PUSHJ	PDP,PRINT
	MOVE	Z,INPA(Q)
	MOVEM	Z,OUTBA(X5)
	MOVE	Z,INPP(Q)
	MOVEM	Z,OUTBP(X5)
	MOVE	Z,INPM(Q)
	MOVEM	Z,OUTBM(X5)
	SKIPN	INPKNK			;Are kings expected?
	JRST	INSL1
	MOVE	Z,INPK(Q)		;Yes
	MOVEM	Z,OUTBK(X5)
	AOS	Q
	AOS	X5
INSL1:	ADDI	Q,3
	ADDI	X5,3
	JRST	INS3			;Try again

INSG:
;	MOVEI	U1,[ASCIZ /G /]
;	PUSHJ	PDP,PRINT
;	MOVE	U1,X4
;	PUSHJ	PDP,NUMOUT
;	MOVEI	U1,[ASCIZ / /]
;	PUSHJ	PDP,PRINT
;	MOVE	U1,X5
;	PUSHJ	PDP,NUMOUT
;	MOVEI	U1,[ASCIZ / 	/]
;	PUSHJ	PDP,PRINT
	MOVE	U2,BOOKA(X3)
	MOVEM	U2,OUTBA(X5)	;Place to insert BOOK values
	MOVEM	U3,OUTBP(X5)
	MOVE	Z,BOOKM(X3)
	MOVEM	Z,OUTBM(X5)
	SKIPN	INPKNK
	JRST	INSG1
	MOVEM	U4,OUTBK(X5)
	AOS	X5
INSG1:	ADDI	X5,3
	MOVEI	Z,10000		;FLAG for duplicate
	SKIPE	INPKNK
	JRST	INSG2		;King case
	CAME	U2,OUTBA-6(X5)
	SOJA	X4,INS1
	CAMN	U3,OUTBP-6(X5)
	IORM	Z,OUTBM-3(X5)
 	SOJA	X4,INS1
INSG2:	CAME	U2,OUTBA-10(X5)	;Test for duplicaate with kings
	SOJA	X4,INS1
	CAME	U3,OUTBP-10(X5)
	SOJA	X4,INS1
	CAMN	U4,OUTBK-10(X5)
	IORM	Z,OUTBM-4(X5)
	SOJA	X4,INS1

	3777777777777
	3777777777777
	3777777777777
	3777777777777
	3777777777777
OUTBLK:	BLOCK	INPSIZ
OUTBA==OUTBLK
OUTBP==OUTBLK+1
OUTBM==OUTBLK+2
OUTBK==OUTBLK+3
;INSZ INSZZ WHERIN WHRINS GETFIL GETFIA GETFIR

INSX:
INS4B:
INS4C:	POPJ	PDP,		;TEMPORARY FIX TO AVOID TROUBLE

INSZ:	MOVEI	U1,[ASCIZ /UNABLE TO ADD TO FILE /]
	PUSHJ	PDP,PRINT
	MOVE	U1,FILEIN
	PUSHJ	PDP,SIXOUT
	PUSHJ	PDP,TERPRI
	JRST	INSX+1		;NO CHANGE TO REPORT

INSZZ:
	MOVEI	U1,[ASCIZ /INSZZ CALLED /]
	PUSHJ	PDP,PRINT
;	POPJ	PDP,		;3 APR 80 FORM BYPASS
	INIT	12,17
	SIXBIT	/DSK/
	Z
	HALT
	MOVE	U2,[SIXBIT /CHK/]
	MOVEM	U2,WHERIN+1
;	MOVE	U2,[055000000000]
;	MOVEM	U2,WHERIN+2
	SETZM	WHERIN+2
	MOVE	U2,[SIXBIT /  1ALS/]
	MOVEM	U2,WHERIN+3
	ENTER	12,WHERIN
	HALT
	OUTPUT	12,WHRINS
	RELEAS	12,
	POPJ	PDP,

WHERIN:	SIXBIT /DIREC3/
	SIXBIT	/CHK/
	055000000000
	SIXBIT /  1ALS/

WHERES=↑D1024		;MUST BE SAME AS IN CKB

WHRINS:	IOWD	WHERES,INDEXX
	Z


GETFIL:	MOVEI	U1,[ASCIZ / GETFIL /]
	PUSHJ	PDP,PRINT
	SETZM	INPCNT
	MOVEI	U2,INPSIZ-1
	SETZM	INPA(U2)
	SOJGE	U2,.-1
	MOVNI	U2,INPSIZ
	HRLM	U2,BKMIN
	MOVEI	U1,INPA-1
	HRRM	U1,BKMIN
	MOVE	U1,FILEI2	;U1 MAY HAVE BEEN CHANGED
	MOVEM	U1,FILEIN	;NOW ACKNOWLEDGE NEW FILE
	MOVEM	U1,DSKBKM
	PUSHJ	PDP,SIXOUT
	INIT	12,17
	SIXBIT	/DSK/
	Z
	HALT
	MOVE	U2,[SIXBIT /DAT/]
	MOVEM	U2,DSKBKM+1
	SETZM	DSKBKM+2
	MOVE	U2,[SIXBIT /  1ALS/]
	MOVEM	U2,DSKBKM+3
	LOOKUP	12,DSKBKM
	JRST	GETFIR
	INPUT	12,BKMIN
GETFIR:	RELEAS	12,
	POPJ	PDP,
;DMPFIL DSKBKD DSKBKM BKMIN BKMIN2 INPA INPP INPM INPK BOOKA BOOKP BOOKK BOOKM BOOKI BOOKMS FILEIN FILEI2 FILEI3 INBITS

DMPFIL:	MOVEI	U1,[ASCIZ / DMPFIL /]
	PUSHJ	PDP,PRINT
;M31	MOVN	U3,INPCNT	;TO PUT INTO AN IOWD
;M31	SUBI	U3,1
;M31	HRLM	U3,BKMIN
	MOVEI	U3,OUTBLK-1
	HRRM	U3,BKMIN
	MOVE	U3,INPCNT
	MOVE	U1,INDEXV
	MOVEM	U3,INDEXC(U1)	;Save the size of this file
	MOVE	U2,FILEIN
	MOVEM	U2,DSKBKM
	MOVE	U1,U2
	PUSHJ	PDP,SIXOUT
	MOVEI	U1,[ASCIZ / IOWD=/]
	PUSHJ	PDP,PRINT
	MOVN	U1,INPCNT
	PUSHJ	PDP,NUMOUT
	MOVEI	U1,[ASCIZ /,/]
	PUSHJ	PDP,PRINT
	HRRZ	U1,BKMIN
	PUSHJ	PDP,NUMOUT
	INIT	12,17
	SIXBIT	/DSK/
	Z
	HALT
	MOVE	U2,[SIXBIT /DAT/]
	MOVEM	U2,DSKBKM+1
	SETZM	DSKBKM+2
	MOVE	U2,[SIXBIT /  1ALS/]
	MOVEM	U2,DSKBKM+3
	ENTER	12,DSKBKM
	HALT
	OUTPUT	12,BKMIN
	RELEAS	12,
	POPJ	PDP,


DSKBKD:	Z		;TEMPORARY SAVE OF DSKBKM FOR DMPFIL
DSKBKM:	SIXBIT 	/BD0001/
	SIXBIT	/DAT/
	055000000000
	SIXBIT	/  1ALS/
	Z

BKMIN:	IOWD	INPSIZ,INPA
	Z
	Z
BKMIN2:	IOWD	INPSIZ,INPA
	Z
	Z

	377777777777		;INPA-5 guard
	377777777777		;INPA-4 guard
	377777777777
	377777777777
	377777777777
INPA:	BLOCK	INPSIZ		;Now set at 1024*10
INPP=INPA+1
INPM=INPA+2
INPK=INPA+3

	377777777777		;BOOKA-1 GUARD
	BLOCK	20
BOOKA:	BLOCK	BOKSIZ+20	;BOKSIZ = 512
BOOKP:	BLOCK	BOKSIZ+20
BOOKK:	BLOCK	BOKSIZ+20
BOOKM:	BLOCK	BOKSIZ+20	;Trunk number, move number and move
BOOKI:	BLOCK	BOKSIZ*2+40	;IND,SERIAL#  INITIALLY THEN SORTED
BOOKMS:	Z		;Temp save for book move; from in left, to in right half
FILEIN:	Z		;FILE ACTUALLY IN MEMORY
FILEI2:	Z		;TEMPORARY STORE for new FILEIN
FILEI3:	Z		;Second filename when splitting a file

INBITS:	LSHC	X2,-3
	LSH	X2,10
	LSHC	X2,1
	LSH	X2,10
	LSHC	X2,1
	LSH	X2,10
	LSHC	X2,1
	LSH	X2,10
	POPJ	PDP,
;BOLAND BOL1 BOL2 BOL3 BOL4 X4VAR BDIN BDIN0 BDIN1 BDIN2 BDIN3 BDIN4

BOLAND:	PUSHJ	PDP,MAGIN
	HALT
	MOVE	X1,U1
	SKIPE	TRUNKF		;DO WE PRINT
	PUSHJ	PDP,TYO
	CAIN	U1,11		;LOOK FOR A TAB
	JRST	.+3		;ONE FOUND
	CAIE	U1,15		;LOOK FOR C.R.
	JRST	.-10		;NOT TIME TO STOP
	SKIPE	TRUNKF		;NOW END COMMENT
	PUSHJ	PDP,TERPRI
BOL1:	PUSHJ	PDP,MAGIN
	HALT
	CAIN	U1,11		;IGNORE SECOND TAB
	JRST	.-3
	MOVEM	U1,BORW#	;BLACK OR WHITE TO PLAY
	SETZ	U2,
	CAIN	U1,"D"
	JRST	BOL3
BOL2:	PUSHJ	PDP,MAGIN
	HALT
	CAIGE	U1,72
	CAIGE	U1,60
	JRST	BOL3
	IMULI	U2,12
	ADD	U2,U1
	SUBI	U2,60
	SETZ	U1,
	JRST	BOL2

BOL3:	MOVEM	U2,WINLOS
	PUSHJ	PDP,NEWLIN
	HALT
	JUMPE	U2,BOL4
	CAME	U1,BORW
	JRST	.+4
	TRNN	U2,1
	AOS	WINLOS
	JRST	.+3
	TRNE	U2,1
	AOS	WINLOS
BOL4:	MOVEI	Z,1
	CAIN	U1,"W"
	MOVEM	Z,COLOR
	CAIN	U1,"B"
	SETZM	COLOR
	PUSHJ	PDP,BDIN	;SET UP BOARD
	MOVE	A,U3
	PUSHJ	PDP,NEWLIN
	HALT
	PUSHJ	PDP,BDIN0
	MOVE	P,U3
	MOVE	K,U5
	MOVEM	A,TA
	MOVEM	P,TP
	MOVEM	K,TK
	MOVEI	U1,"TK"
	MOVEM	U1,LPOINT
	SETZ	X2,
	SETOM	X4VAR
	JRST	BEGIN2

X4VAR:	-1		;COUNT OF VARIATION BOARDS

BDIN:	SETZ	U5,
BDIN0:	SETZ	U3,
BDIN1:	HRLZI	U4,400000
	SETZ	U2,
BDIN2:	PUSHJ	PDP,MAGIN
	HALT
	CAIGE	U1,72
	CAIGE	U1,60
	JRST	BDIN3
	IMULI	U2,12
	ADD	U2,U1
	SUBI	U2,60
	SETZ	U1,
	JRST	BDIN2

BDIN3:	EXCH	U1,U2
	JUMPE	U1,BDIN4
	PUSHJ	PDP,OUTIN
	MOVNS	U1
	ROT	U4,(U1)
	TDO	U3,U4
	CAIE	U2,"K"
	JRST	.+3
	TDO	U5,U4
	JRST	BDIN1
BDIN4:	CAIN	U2,","
	JRST	BDIN1
	POPJ	PDP,

;FIXX NOFIND FIXK FIXK2

FIXX:	TTYUUO	11,0
	SETZM	LASCAR
	SETZM	FLAG#
	SETZM	FIXINS#
	MOVEI	U1,1
	SETZM	COLOR
	CAME	U1,SI
	AOS	COLOR
	SETZB	X3,X4
	MOVEM	A,PLA
	MOVEM	P,PLP
	MOVEM	K,PLK
	SETZM	OJ
	PUSHJ	PDP,LEGAL
	JRST	FIX1		;NO LEGAL MOVES
	AOS	OJ		;SET JUMP FLAG
	PUSHJ	PDP,X4NORM
	MOVEI	U1,[ASCIZ /LEGAL MOVES ARE:/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,LEGM	;REPORT LEGAL MOVES
	SETOM	BINDEX
	MOVEI	Z,1
	XORM	Z,COLOR		;COLOR IS REVERSED IN SAVMOV
	PUSHJ	PDP,SAVMOV
	MOVEI	Z,1
	XORM	Z,COLOR
	HLRZ	U1,BOOKI
	MOVEM	U1,FILEI2
	CAME	U1,FILEIN
	PUSHJ	PDP,GETFIL
	MOVE	U2,BOOKA
	MOVE	U3,BOOKP
	MOVE	U4,BOOKK
	PUSHJ	PDP,FINDX1
	JRST	NOFIND
	MOVEM	X1,X1S
	MOVEI	U1,[ASCIZ /LISTED MOVES ARE /]
	PUSHJ	PDP,PRINT
	MOVE	X1,X1S
	MOVE	X5,INPA(X1)
	PUSHJ	PDP,EXBITS
	PUSHJ	PDP,RPMOVE
	MOVE	X5,INPP(X1)
	PUSHJ	PDP,EXBITS
	SKIPE	BOOKK		;A KING BOARD
	JRST	FIXK		;YES
	JUMPE	X5,FIX6
	MOVEI	U1,[ASCIZ /,/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,RPMOVE
	JRST	FIX6

NOFIND:	MOVEM	X1,X1S
	MOVEI	U1,[ASCIZ /BOARD NOT FOUND, CR OR TYPE MOVE :/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	TTYUUO	11,0
	SETZM	LASCAR
	PUSHJ	PDP,SCAN
	CAIN	U1,12		;A LINE FEED
	JRST	.-2		;YES
	CAIN	U1,15		;A CR
	JRST	FIXOK
	SETOM	FIXINS		;SO NEW BOARD WILL BE INSERTED
	SETZM	BOOKM
	SETZM	BOOKM+1
	JRST	FIX8		;NOW GET MOVE

FIXK:	MOVE	Z,X5
	MOVE	X5,INPK(X1)
	PUSHJ	PDP,EXBITS
	LSH	Z,4
	IORB	X5,Z
	JUMPE	X5,FIXK2
	MOVEI	U1,[ASCIZ /, WIN-LOSS DISTANCE IS /]
	PUSHJ	PDP,PRINT
	MOVE	U1,X5
	PUSHJ	PDP,NUMOUT
	PUSHJ	PDP,TERPRI
	JRST	FIX6

FIXK2:	MOVEI	U1,[ASCIZ /, REPORTED AS A DRAW./]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	JRST	FIX6
;RPMOVE FIX1 FIX6 FIX7 FIX8 FIX11 FIX10 FIX13

RPMOVE:	MOVEM	X5,X4
	JUMPN	X5,.+4
	MOVEI	U1,[ASCIZ /0-0/]
	PUSHJ	PDP,PRINT
	POPJ	PDP,
	SKIPN	COLOR
	JRST	.+7
	MOVEI	U1,1
	CAMN	X4,X4TAB(U1)
	JRST	.+3
	CAIGE	U1,17
	AOJA	U1,.-3
	MOVE	X4,U1
	SUBI	X4,1		;COUNT FROM ZERO
	MOVE	U3,MOVES(X4)
	JUMPN	U3,.+4
	MOVEI	U1,[ASCIZ /ILLEGAL/]
	PUSHJ	PDP,PRINT
	POPJ	PDP,
	HLRZ	U1,U3
	PUSHJ	PDP,NUMOUT
	MOVEI	U1,[ASCIZ /-/]
	PUSHJ	PDP,PRINT
	HRRZ	U1,U3
	PUSHJ	PDP,NUMOUT
	POPJ	PDP,

FIX1:	MOVEI	U1,[ASCIZ /NO LEGAL MOVES FOUND./]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	POPJ	PDP,

FIX6:	TTYUUO	11,0
	SETZM	LASCAR
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,TERPRI
	MOVEI	U1,[ASCIZ /CR IF OK, OR ENTER MOVES WANTED/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
FIX7:	PUSHJ	PDP,SCAN
	CAIN	U1,12		;A LINE FEED
	JRST	FIX7		;YES
	CAIN	U1,15		;A CR
	JRST	FIXOK
	SETZM	BOOKM
	SETZM	BOOKM+1
FIX8:	HRLZ	U2,U1		;START IN LEFT HALF
	PUSHJ	PDP,SCAN
	TLNE	U1,-1
	JRST	.+3
	PUSHJ	PDP,EOL
	JRST 	ERR
	HRR	U2,U1		;TERMINATION IN RIGHT HALF
	JUMPE	U2,NULL		;TO STORE NO-MOVE BOARD FOR TEST
	MOVEI	X4,20
	CAMN	U2,MOVES(X4)
	JRST	.+6
	SOJGE	X4,.-2
	MOVEI	U1,[ASCIZ /ILLEGAL MOVE. /]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	JRST	FIX6
	ADDI	X4,1		;TO COUNT FROM 1
	SKIPE	COLOR
	MOVE	X4,X4TAB(X4)
	MOVEM	X4,BOOKM
	SKIPE	BOOKK
	JRST	FIX9K
	PUSHJ	PDP,SCAN
	CAIN	U1,15
	JRST	FIX11
	TLNE	U1,-1
	JRST	.+3
	PUSHJ	PDP,EOL
	JRST	ERR
	HRRZS	U1
	HRLZ	U2,U1
	PUSHJ	PDP,SCAN
	TLNE	U1,-1
	JRST	.+3
	PUSHJ	PDP,EOL
	JRST 	ERR
	HRR	U2,U1
	MOVEI	X4,20
	CAMN	U2,MOVES(X4)
	JRST	.+6
	SOJGE	X4,.-2
	MOVEI	U1,[ASCIZ /ILLEGAL SECOND MOVE, FIRST MOVE ONLY WILL BE USED. /]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	JRST	FIX11
	ADDI	X4,1		;TO COUNT FROM 1
	SKIPE	COLOR
	MOVE	X4,X4TAB(X4)
	MOVEM	X4,BOOKM+1

FIX11:	MOVE	X1,X1S
	SKIPE	FIXINS		;IS BOARD IN TABLE
	JRST	INS4B		;NO SO INSERT
	MOVE	X1,X1S		;WE NEED THIS
FIX10:	HRRZ	X2,BOOKM
	PUSHJ	PDP,INBITS
	MOVE	U1,INPA(X1)
	AND	U1,[377377377377]
	IOR	U1,X2
	MOVEM	U1,INPA(X1)
	SKIPE	BOOKK
	JRST	FIX12
FIX13:	MOVE	X2,BOOKM+1
	PUSHJ	PDP,INBITS
	MOVE	U1,INPP(X1)
	AND	U1,[377377377377]
	IOR	U1,X2
	MOVEM	U1,INPP(X1)
	JRST	FIXZ
;FIX12 FIXOK FIXZ ACCEPT ACC ACC1 ACC2 ACC3

FIX12:	HLRZ	X2,BOOKM
	LSH	X2,-4
	PUSHJ	PDP,INBITS
	MOVE	U1,INPP(X1)
	AND	U1,[377377377377]
	IOR	U1,X2
	MOVEM	U1,INPP(X1)
	HLRZ	X2,BOOKM
	ANDI	X2,17
	PUSHJ	PDP,INBITS
	MOVE	U1,INPK(X1)
	AND	U1,[377377377377]
	IOR	U1,X2
	MOVEM	U1,INPK(X1)
	JRST	FIXZ

FIXOK:	MOVEI	U1,[ASCIZ /NO CHANGE MADE./]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	JRST	.+2
FIXZ:	PUSHJ	PDP,DMPFIL
	PUSHJ	PDP,TERPRI
	SETOM	BINDEX		;TO OVERWRITE TRASH
	POPJ	PDP,
ACCEPT:	PUSHJ	PDP,TERPRI
	SETZM	U5
	TTYUUO	11,0
	SETZM	LASCAR
	MOVEI	U1,[ASCIZ /BLACK PIECES ON: /]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,ACC		;READ IN BLACK PIECES
	MOVEM	U3,OA		;STORE BLACK PIECES
	MOVEI	U1,[ASCIZ /WHITE PIECES ON: /]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,ACC		;NOW READ IN WHITE PIECES
	MOVEI	U1,[ASCIZ /BLACK TO PLAY? /]
	PUSHJ	PDP,PRINT
	MOVEI	U1,1
	MOVEM	U1,SI
	PUSHJ	PDP,NOYES
	AOSA	SI
	JRST	.+3		;BLACK IS TO PLAY
	EXCH	U3,OA
	SETZM	SIDE
	MOVEM	U3,OP		;STORE WHITE PIECES
	MOVEM	U5,OK
	MOVE	A,OA
	MOVEM	A,PLA
	MOVE	P,OP
	MOVEM	P,PLP
	MOVE	K,OK
	MOVEM	K,PLK
	PUSHJ	PDP,TERPRI
	JRST	FIXX

ACC:	SETZM	U3
ACC1:	HRLZI	U4,400000
ACC2:	PUSHJ	PDP,SCAN
	CAIN	U1,15		;CR?
	POPJ	PDP,		;YES
	TLZE	U1,400000	;NUMBER?
	JRST	ACC3		;YES
	HRRZS	U1		;GET RID OF LEFT HALF FLAG BITS
	CAIN	U1,K		;IF A KING ...
	TDO	U5,U4		; ... SET KING BIT
	JRST	ACC1
ACC3:	PUSHJ	PDP,OUTIN	;CONVERT TO INTERNAL NUMBERS
	MOVNS	U1
	ROT	U4,(U1)		;ROTATE TO BIT'S POSITION
	TDO	U3,U4		;SET PIECE'S BIT
	JRST	ACC2
;SM SM1 SM3 SM4 SM5 SM5A SM6 SM6A SM20 SM21 SM22 SM23 SM24 SM25 SM25A SM26 SM26A SM30 SM31 SM32 SM33 SM35 SM35A SM36 SM36A
;Routine to smooth data in EVAL table both diagonally and adjacently
;and leave  ((L-R)/(L+R) LSH 14) + CORADD in EVAL space

SM:	MOVEM K,KSAVE#
SM1:	SUBI K,SIGL11
	SETZM EVAL11(K)
	HRLZI U1,EVAL11(K)
	HRRI U1,EVAL11+1(K)
	BLT U1,EVAL11+↑D44(K)
	MOVEI U1,2		;First level start
SM3:	MOVEI U2,2
SM4:	MOVEI U3,4
SM5:	MOVE X1,U1
	IMULI X1,3
	ADD X1,U2
	IMULI X1,5
	ADD X1,U3
	MOVN X2,X1
	ADDI X2,↑D44
	ADD X1,K
	ADD X2,K
	MOVS Z,LRN11(X2)		;To balance tables around zero
	ADD Z,LRN11(X1)
	LSH Z,-1
	TRZ Z,400000
	ADDM Z,EVAL11(X1)
;JRST SM5A here to surpress adjacent smoothing
	LSH Z,-3
	TRZ Z,700000
	CAIGE U1,2
	ADDM Z,EVAL11+↑D15(X1)		;Upward adjacent smoothing, first term
	SKIPLE U1
	ADDM Z,EVAL11-↑D15(X1)		;Downward adjacent smoothing, first term
	CAIGE U2,2		;Repeat for second term
	ADDM Z,EVAL11+5(X1)
	SKIPLE U2
	ADDM Z,EVAL11-5(X1)
	CAIGE U3,4		;Repeat for third term
	ADDM Z,EVAL11+1(X1)
	SKIPLE U3
	ADDM Z,EVAL11-1(X1)
SM5A:	SOJGE U3,SM5
	SOJGE U2,SM4
	SOJGE U1,SM3
	SETZM CPOS
	SETZM CNEG
	MOVEI U1,↑D44		;Now get (L-R)/(L+R) ASH 14
	MOVE X1,U1
	ADD X1,K
SM6:	HLRZ U2,EVAL11(X1)
	HRRZ U3,EVAL11(X1)
	SUB U2,U3
	JUMPE U2,SM6A
	LSH U3,1
	ADD U3,U2
	ASH U2,15		;Multiply by 8192
	IDIV U2,U3		;and get ratio
	SKIPLE U2
	AOS CPOS
	SKIPGE U2
	AOS CNEG
	SKIPE U2
	ADD U2,CORADD		;Make it always positive for processing
SM6A:	MOVEM U2,EVAL11(X1)
	SOS X1
	SOJGE U1,SM6
	MOVE K,KSAVE
	JRST L13

;Second level smoothing
SM20:	MOVEM K,KSAVE
SM21:	SUBI K,SIGL21
	SETZM EVAL21(K)
	HRLZI U1,EVAL21(K)
	HRRI U1,EVAL21+1(K)
	BLT U1,EVAL21+↑D342(K)
SM22:	MOVEI U1,6
SM23:	MOVEI U2,6
SM24:	MOVEI U3,6
SM25:	MOVE X1,U1
	IMULI X1,7
	ADD X1,U2
	IMULI X1,7
	ADD X1,U3
	MOVN X2,X1
	ADDI X2,↑D342
 	ADD X1,K
	ADD X2,K
	MOVS Z,LRN21(X2)
	ADD Z,LRN21(X1)
	LSH Z,-1
	TRZ Z,400000
	ADDM Z,EVAL21(X1)
;JRST SM25A here to surpress adjacent smoothing
	LSH Z,-3
	TRZ Z,700000
	CAIGE U1,6
	ADDM Z,EVAL21+↑D49(X1)
	SKIPLE U1
	ADDM Z,EVAL21-↑D49(X1)
	CAIGE U2,6
	ADDM Z,EVAL21+7(X1)
	SKIPLE U2
	ADDM Z,EVAL21-7(X1)
	CAIGE U3,6
	ADDM Z,EVAL21+1(X1)
	SKIPLE U3
	ADDM Z,EVAL21-1(X1)
SM25A:	SOJGE U3,SM25
	SOJGE U2,SM24
	SOJGE U1,SM23
	SETZM CPOS
	SETZM CNEG
	MOVEI U1,↑D342		;Now get (L-R)/(L+R) ASH 14
	MOVE X1,U1
	ADD X1,K
SM26:	HLRZ U2,EVAL21(X1)
	HRRZ U3,EVAL21(X1)
	SUB U2,U3
	JUMPE U2,SM26A
	LSH U3,1
	ADD U3,U2
	ASH U2,15		;Multiply by 8192
	IDIV U2,U3		;and get ratio
	SKIPLE U2
	AOS CPOS
	SKIPGE U2
	AOS CNEG
	SKIPE U2
	ADD U2,CORADD		;Make it always positive for processing
SM26A:	MOVEM U2,EVAL21(X1)
	SOS X1
	SOJGE U1,SM26
	MOVE K,KSAVE
	JRST L23

SM30:	MOVEM K,KSAVE#
SM31:	SUBI K,SIGLF
	SETZM EVALF(K)
	HRLZI U1,EVALF(K)
	HRRI U1,EVALF+1(K)
	BLT U1,EVALF+↑D224(K)
SM32:	MOVEI U1,↑D14
SM33:	MOVEI U2,↑D14
SM35:	MOVE X1,U1
	IMULI X1,↑D15
	ADD X1,U2
	MOVN X2,X1
	ADDI X2,↑D224
	ADD X1,K
	ADD X2,K
	MOVS Z,LRNF(X2)
	ADD Z,LRNF(X1)
	LSH Z,-1
	TRZ Z,400000
	ADDM Z,EVALF(X1)
	JFCL			;Room for JRST SM35A to surpress adjacent smoothing
	LSH Z,-2
	TRZ Z,600000
	CAIGE U1,↑D14
	ADDM Z,EVALF+↑D15(X1)
	SKIPLE U1
	ADDM Z,EVALF-↑D15(X1)
	CAIGE U2,↑D14
	ADDM Z,EVALF+1(X1)
	SKIPLE U2
	ADDM Z,EVALF-1(X1)
SM35A:	SOJGE U2,SM35
	SOJGE U1,SM33
	SETZM CPOS
	SETZM CNEG
	MOVEI U1,↑D224		;Now get (L-R)/(L+R) ASH 14
	MOVE X1,U1
	ADD X1,K
SM36:	HLRZ U2,EVALF(X1)
	HRRZ U3,EVALF(X1)
	SUB U2,U3
	JUMPE U2,SM36A
	LSH U3,1
	ADD U3,U2
	ASH U2,15		;Multiply by 8192
	IDIV U2,U3		;and get ratio
	SKIPLE U2
	AOS CPOS
	SKIPGE U2
	AOS CNEG
	SKIPE U2
	ADD U2,CORADD		;Make it always positive for processing
SM36A:	MOVEM U2,EVALF(X1)
	SOS X1
	SOJGE U1,SM36
	MOVE K,KSAVE
	JRST L33
;SGT5 SGT5A SGT5B SGT5C SGT3 SGT3A SGTOT NUM4 NUM1 XPAR TABFIX TABFI2 TABFI3 TABFIZ TBCHAN TBFILE PAR TABLST TAB1 TABLS2 TAB2 TAB3 TAB3A TAB3B TAB3C TAB4 TAB4A TAB4B TAB5 TAB5A TAB8 TAB7 TAB6 TAB20 TAB20A TAB20B TAB21 TAB22 TAB23 TAB24 TAB24A TAB25 TAB26 TAB27 TAB31 TAB32 TAB32A TAB33 TAB34

;Register assignments
;	X1	Gets used in NUM1
;	U1	Address of ASCIZ to print
;	X2	Gets used in some subroutine
;	U2	-2 -1 0 1 2 Numbers for headings, Index for 1st 3-range term
;	X3	Index between tables
;	U3	Index to 5 for 5-range terms
;	X4	TLIST index for names
;	U4	Repeat count
;	X5	Index into EVAL table
;	U5	Phase
;	Q	Index for 2nd 3-range term

SGT5:	BLOCK	7	;5-range term totals
SGT5A:	BLOCK	7 	;5-range term totals (for second level)
SGT5B:	BLOCK	7	;5-range term totals (for second level)
SGT5C:	BLOCK	↑D15	;15-range term totals (for third level)
SGT3:	BLOCK	3	;1st 3-range term totals
SGT3A:	BLOCK	3	;2nd 3-range term totals
SGTOT:	0		;Total for 1st level table

NUM4:	CAIGE U1,144
	CAMG U1,[-144]
	JRST .+3
	MOVEI X1," "
	PUSHJ PDP,TYO
	CAIGE U1,12
	CAMG U1,[-12]
	JRST .+3
	MOVEI X1," " 
	PUSHJ PDP,TYO
NUM1:	JUMPL	U1,NUM2
	MOVEI	X1," "
	PUSHJ	PDP,TYO
	JRST	NUM3



;Routine to list Signature Tables in a file called SIGTAB.001 etc.
XPAR:	SETOM TABFLG#
	SKIPA
TABFIX:	SETZM TABFLG
	POPJ	PDP,		;CKLY EXIT
	MOVE U1,[SIXBIT /001   /]
	MOVEM U1,TBFILE+1
TABFI2:	OPEN 2,TBCHAN
	JRST TABFIZ
	MOVE U1,[SIXBIT /  1ALS/]
	MOVEM U1,TBFILE+3
	LOOKUP 2,TBFILE
	JRST TABFI3
	CLOSE 2,
	HLLZ U1,TBFILE+1
	ADD U1,[1,,0]
	MOVEM U1,TBFILE+1
	JRST TABFI2

TABFI3:	ENTER 2,TBFILE
	JRST TABFIZ
	OUTBUF 2,4
	MOVEI U1,1
	EXCH U1,LPFLAG
	MOVEM U1,LPFLAS#
	PUSHJ PDP,TAB1
	RELEAS 2,
	MOVE U1,LPFLAS
	MOVEM U1,LPFLAG
	POPJ PDP,

TABFIZ:	OUTSTR [ASCIZ/SIGTAB initiation error/]
	POPJ PDP,

TBCHAN:	1		;Mode
	SIXBIT/DSK   /
	LPTBUF,,0
	
TBFILE:	SIXBIT/TAB/
	SIXBIT/001   /
	0
	SIXBIT/  1ALS/


;Routine to list Signature Tables (on line when here or to file if from TABFIX)
;If TABFLG is SETOM  then only summary info is listed
PAR:	SETOM TABFLG
	SKIPA
TABLST:	SETZM TABFLG
TAB1:	MOVEI U5,3		;Start with phase 3
	MOVEI U1,[ASCIZ /	Signature Tables after /]
	PUSHJ PDP,PRINT
	MOVE U1,LABEL
	PUSHJ PDP,NUMOUT
	MOVEI U1,[ASCIZ / boards. /]
	PUSHJ PDP,PRINT
TABLS2:	MOVE U4,U5
	IMULI U4,SIGSIZ
	MOVE U2,LABEL+2(U4)
	ADD U2,LABEL+3(U4)
	ADD U2,LABEL+4(U4)
	MOVE U1,LABEL+3(U4)
	ASH U1,-1
	ADD U1,LABEL+2(U4)
	IMULI U1,1750
	IDIV U1,U2
	IDIVI U1,12
	MOVE U2,X2
	PUSHJ PDP,RJOUT1
	MOVEI U1,[ASCIZ /./]
	PUSHJ PDP,PRINT
	MOVE U1,U2
	PUSHJ PDP,NUMOUT
	SOJGE U5,TABLS2
	SKIPN TABFLG
	PUSHJ PDP,TERPRI
	PUSHJ PDP,TERPRI
	MOVEI U5,3
TAB2:	SKIPE TABFLG
	PUSHJ PDP,TERPRI
	MOVEI U1,[ASCIZ /				Phase /]
	PUSHJ PDP,PRINT
	MOVE U1,U5
	PUSHJ PDP,NUMOUT
	SKIPE TABFLG
	PUSHJ PDP,TERPRI
	SKIPE TABFLG
	PUSHJ PDP,TERPRI
	MOVE X5,U5
	IMULI X5,SIGSIZ
	MOVEI X3,6		;Number of first level tables
	MOVE X4,U5
	IMULI X4,↑D18		;18 names per phase
TAB3:
	SKIPE TABFLG
	JRST TAB3C		;Bypass when PAR or XPAR
	PUSHJ PDP,TERPRI
	MOVEI U1,[ASCIZ /↓/]
	PUSHJ PDP,PRINT
	XCT TLIST(X4)		;The 1st 3-range term name
	PUSHJ PDP,PRINT
	PUSHJ PDP,TERPRI
	XCT TLIST+1(X4)		;The second range-3 term name
	PUSHJ PDP,PRINT
	MOVEI U1,[ASCIZ /    -1		     0		    +1
/]
	PUSHJ PDP,PRINT
	XCT TLIST+2(X4)		;The range-5 term name 
	PUSHJ PDP,PRINT
	MOVEI U4,3
TAB3A:	MOVNI U2,2		;Now print -2  -1  0  1  2  three times
TAB3B:	MOVE U1,U2		;Start line with a -1, 0 or 1
	PUSHJ PDP,NUM1
	CAIGE U2,2
	AOJA U2,TAB3B
	MOVEI U1,[ASCIZ /	/]
	PUSHJ PDP,PRINT
	SOJG U4,TAB3A
	PUSHJ PDP,TERPRI
TAB3C:	MOVEI U2,3
	SETZM SGT3(U2)
	SETZM SGT3A(U2)
	SOJG U2,.-2
	MOVEI U3,5
	SETZM SGT5(U3)
	SOJG U3,.-1
	SETZM SGTOT
	MOVEI Q,2
	MOVNI U4,1		;The 3 lines of data start with -1, 0, and 1
TAB4:	SKIPE TABFLG
	JRST TAB4A
	PUSHJ PDP,TERPRI
	MOVE U1,U4
	PUSHJ PDP,NUM1
	AOS U4
	MOVEI U1,[ASCIZ /	/]
	PUSHJ PDP,PRINT
TAB4A:	MOVEI U2,2
TAB4B:	MOVEI U3,4
TAB5:	MOVE U1,EVAL11(X5)
	ADDM U1,SGT5(U3)
	ADDM U1,SGT3(U2)
	ADDM U1,SGT3A(Q)
	ADDM U1,SGTOT
	SKIPN TABFLG
	PUSHJ PDP,NUM1
	AOS X5
	SOJGE U3,TAB5
	MOVEI U1,[ASCIZ /	/]
	SKIPN TABFLG
	PUSHJ PDP,PRINT
	SOJGE U2,TAB4B
	SOJGE Q,TAB4
	SKIPE TABFLG
	JRST TAB5A
	PUSHJ PDP,TERPRI
	MOVEI U1,[ASCIZ /
Total /]
	PUSHJ PDP,PRINT
	MOVE U1,SGTOT
	PUSHJ PDP,NUMOUT
	MOVEI U1,[ASCIZ /  /]
	PUSHJ PDP,PRINT
TAB5A:	SETZM SGTOT
	XCT TLIST(X4)		;The first range-3 term name
	PUSHJ PDP,PRINT
	MOVEI Q,2
TAB8:	MOVE U1,SGT3A(Q)
	PUSHJ PDP,NUM4
	SETZM SGT3A(Q)
	SOJGE Q,TAB8

	MOVEI U1,[ASCIZ /  	/]
	PUSHJ PDP,PRINT
	XCT TLIST+1(X4)		;The 2nd 3-range term name
	PUSHJ PDP,PRINT
	MOVEI U2,2
TAB7:	MOVE U1,SGT3(U2)
	PUSHJ PDP,NUM4
	SETZM SGT3(U2)
	SOJGE U2,TAB7
	MOVEI U1,[ASCIZ /  	/]
	PUSHJ PDP,PRINT

	XCT TLIST+2(X4)		;The 5-range term name
	PUSHJ PDP,PRINT
	MOVEI U3,4
TAB6:	MOVE U1,SGT5(U3)
	PUSHJ PDP,NUM4
	SETZM SGT5(U3)
	SOJGE U3,TAB6

	PUSHJ PDP,TERPRI
	ADDI X4,3		;3 names farther along
	SOJG X3,TAB3		;Now for the next first level table
	SKIPN TABFLG
	PUSHJ PDP,TERPRI
	PUSHJ PDP,TERPRI
TAB20:	MOVEI U1,[ASCIZ /				Second level
/]
	PUSHJ PDP,PRINT
	PUSHJ PDP,TERPRI
	MOVE X5,U5
	IMULI X5,SIGSIZ
	MOVEI X3,2	;Number of second level tables
	MOVE X4,U5
	IMULI X4,↑D18		;18 names per phase
TAB20A:	MOVEI U2,3
	SKIPE TABFLG
	JRST TAB21
	MOVEI U1,[ASCIZ /↓/]
	PUSHJ PDP,PRINT
	XCT TLIST(X4)
	PUSHJ PDP,PRINT
	AOS X4
	SOJG U2,.-3
	PUSHJ PDP,TERPRI
	MOVEI U2,3
	XCT TLIST(X4)
	PUSHJ PDP,PRINT
	AOS X4
	SOJG U2,.-3
	PUSHJ PDP,TERPRI
	MOVEI U1,[ASCIZ /      /]
	PUSHJ PDP,PRINT
	MOVNI U2,3
TAB20B:	MOVE U1,U2
	PUSHJ PDP,NUM1
	MOVEI U1,[ASCIZ /	      /]
	PUSHJ PDP,PRINT
	AOS U2	
	CAIG U2,3
	JRST TAB20B
	PUSHJ PDP,TERPRI
	MOVEI U2,3
	XCT TLIST(X4)
	PUSHJ PDP,PRINT
	AOS X4
	SOJG U2,.-3
	PUSHJ PDP,TERPRI
	MOVEI U2,7
	MOVEI U1,[ASCIZ /-3-2-1 0 1 2 3	/]
	PUSHJ PDP,PRINT
	SOJG U2,.-2
	PUSHJ PDP,TERPRI
	PUSHJ PDP,TERPRI
TAB21:	MOVEI U2,6
	SETZM SGT5(U2)
	SETZM SGT5A(U2)
	SETZM SGT5B(U2)
	SOJGE U2,.-3
	MOVEI U2,6
TAB22:	MOVEI U3,6
TAB23:	MOVEI Q,6
TAB24:	MOVE U1,EVAL21(X5)
	ADDM U1,SGT5(U2)
	ADDM U1,SGT5A(U3)
	ADDM U1,SGT5B(Q)
	ADDM U1,SGTOT
	SKIPN TABFLG
	PUSHJ PDP,NUM1
	AOS X5
	SOJGE Q,TAB24
	MOVEI U1,[ASCIZ /	/]
	SKIPN TABFLG
	PUSHJ PDP,PRINT
	SOJGE U3,TAB23
	SKIPN TABFLG
	PUSHJ PDP,TERPRI
	SOJGE U2,TAB22
	SKIPE TABFLG
	JRST TAB24A
	PUSHJ PDP,TERPRI
	MOVEI U1,[ASCIZ /Total /]
	PUSHJ PDP,PRINT
	MOVE U1,SGTOT
	PUSHJ PDP,NUMOUT
	PUSHJ PDP,TERPRI
TAB24A:	SETZM SGTOT
	MOVEI U2,6
TAB25:	MOVE U1,SGT5(U2)
	PUSHJ PDP,NUM4
	SETZM SGT5(U2)
	SOJGE U2,TAB25
	MOVEI U1,[ASCIZ /\\/]
	PUSHJ PDP,PRINT
	MOVEI U2,6
TAB26:	MOVE U1,SGT5A(U2)
	PUSHJ PDP,NUM4
	SETZM SGT5A(U2)
	SOJGE U2,TAB26
	MOVEI U1,[ASCIZ /\\/]
	PUSHJ PDP,PRINT
	MOVEI U2,6
TAB27:	MOVE U1,SGT5B(U2)
	PUSHJ PDP,NUM4
	SETZM SGT5B(U2)
	SOJGE U2,TAB27
	SKIPN TABFLG
	PUSHJ PDP,TERPRI
	PUSHJ PDP,TERPRI
	SOJG X3,TAB20A
	PUSHJ PDP,TERPRI
	MOVEI U1,[ASCIZ /				Third level/]
	PUSHJ PDP,PRINT
	PUSHJ PDP,TERPRI
	PUSHJ PDP,TERPRI
	MOVE X5,U5
	IMULI X5,SIGSIZ
	MOVEI U2,↑D14
TAB31:	MOVEI U3,↑D14
TAB32:	MOVE U1,EVALF(X5)
	ADDM U1,SGT5(U2)
	ADDM U1,SGT5C(U3)
	ADDM U1,SGTOT
	SKIPN TABFLG
	PUSHJ PDP,NUM4
	AOS X5
	MOVEI U1,[ASCIZ / /]
	SKIPN TABFLG
	PUSHJ PDP,PRINT
	SOJGE U3,TAB32
	SKIPN TABFLG
	PUSHJ PDP,TERPRI
	SOJGE U2,TAB31
	SKIPE TABFLG
	JRST TAB32A
	PUSHJ PDP,TERPRI
	MOVEI U1,[ASCIZ /Total /]
	PUSHJ PDP,PRINT
	MOVE U1,SGTOT
	PUSHJ PDP,NUMOUT
	MOVEI U1,[ASCIZ /
Term averages
/]
	PUSHJ PDP,PRINT
TAB32A:	SETZM SGTOT
	MOVEI U2,↑D14
TAB33:	MOVE U1,SGT5(U2)
	IDIVI U1,↑D15
	PUSHJ PDP,NUM4
	SETZM SGT5(U2)
	MOVEI U1,[ASCIZ / /]
	PUSHJ PDP,PRINT
	SOJGE U2,TAB33
	PUSHJ PDP,TERPRI
	MOVEI U2,↑D14
TAB34:	MOVE U1,SGT5C(U2)
	IDIVI U1,↑D15
	PUSHJ PDP,NUM4
	SETZM SGT5C(U2)
	MOVEI U1,[ASCIZ / /]
	PUSHJ PDP,PRINT
	SOJGE U2,TAB34
	PUSHJ PDP,TERPRI
	MOVEI X1,14		;A FF
	SKIPN TABFLG
	PUSHJ PDP,TYO
	SOJGE U5,TAB2		;Now for the next phase
	POPJ PDP,
;LEGM LEGM1 INOUT EXBITS FIXIN FIX9K NULL OA OP OK MOVES

LEGM:	SETZM	FLAG
	MOVEI	X4,17
	SETZM	MOVES(X4)	;CLEAR SPACE
	SOJGE	X4,.-1
	SETZ	X4,
	MOVEI	U3,4
	SKIPE	U2,PLRF
	PUSHJ	PDP,LEGM1
	MOVEI	U3,5
	SKIPE	U2,PLLF
	PUSHJ	PDP,LEGM1
	MOVNI	U3,4
	SKIPE	U2,PLLB
	PUSHJ	PDP,LEGM1
	MOVNI	U3,5
	SKIPE	U2,PLRB
	PUSHJ	PDP,LEGM1
	PUSHJ	PDP,TERPRI
	MOVEI	U1,15
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,12
	PUSHJ	PDP,MAGOUT
;	MOVEI	U1,15
;	PUSHJ	PDP,MAGOUT
;	MOVEI	U1,12
;	PUSHJ	PDP,MAGOUT
	POPJ	PDP,

LEGM1:	MOVEI	U4,↑D35
	TRNE	U2,1
	JRST	.+4
	LSH	U2,-1
	SOJG	U4,.-3
	POPJ	PDP,
	MOVEI	U1,[ASCIZ /,/]
	SKIPE	FLAG
	PUSHJ	PDP,PRINT
	MOVEI	U1,54			; A COMMA
	SKIPE	FLAG
	PUSHJ	PDP,MAGOUT		; CKLY
	MOVE	U1,U4
	PUSHJ	PDP,INOUT
	HRLZM	U5,MOVES(X4)
	MOVEI	U1,[ASCIZ /-/]
	PUSHJ	PDP,PRINT
	MOVEI	U1,55		;A DASH
	PUSHJ	PDP,MAGOUT
	MOVE	U1,U4
	ADD	U1,U3
	SKIPE	OJ
	ADD	U1,U3
	PUSHJ	PDP,INOUT
	HRRM	U5,MOVES(X4)
	AOS	FLAG
	AOS	X4
	JRST	LEGM1+3

INOUT:	CAIL	U1,↑D27
	SOS	U1
	CAIL	U1,↑D18
	SOS	U1
	CAIL	U1,↑D9
	SOS	U1
	MOVEM	U1,U1ZYX#
;	PUSHJ	PDP,NUMOUT
	MOVE	X1,U1ZYX
	PUSHJ	PDP,MAGOU3
	POPJ	PDP,

EXBITS:	LSHC	X5,-11		;EXTRACT GUARD BITS
	LSH	X5,-10
	LSHC	X5,-1
	LSH	X5,-10
	LSHC	X5,-1
	LSH	X5,-10
	LSHC	X5,3
	POPJ	PDP,

FIXIN:	MOVE	X1,X1S
	PUSHJ	PDP,INS4C		;MUST INSERT LINE
	SKIPE	BOOKM+1		;IS THERE ANOTHER MOVE
	JRST	FIX13
	PUSHJ	PDP,DMPFIL
	PUSHJ	PDP,TERPRI
	POPJ	PDP,

FIX9K:	MOVEI	U1,[ASCIZ /[CR FOR DRAW OR TYPE WIN-LOSS DISTANCE /]
	PUSHJ	PDP,PRINT
	TTYUUO	11,0
	SETZM	LASCAR
	PUSHJ	PDP,SCAN
	CAIN	U1,12
	JRST	.-2
	CAIE	U1,15
	HRLM	U1,BOOKM
	JRST	FIX11

NULL:	MOVEI	U1,[ASCIZ /0-0 STORES A NO-MOVE BOARD. DO YOU WANT THIS. Y OR N: /]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,NOYES
	JRST	FIX6		;TRY AGAIN
	JRST	FIX11		;STORE NO-MOVE BOARD

OA:	Z
OP:	Z
OK:	Z

MOVES:	BLOCK	20		;SPACE FOR LEGAL MOVES

;BOUT BOUT0 BOUT1 BOUT2 BOUT3 BORD BORD1 BORD2 NOTHLD PHELD PSPACE PCURN NXTNUM BORD3 NPRINT NHOLD KPRINT CURNUM FIXNUM

;************************************************************
;BOUT PRINTS THE CURRENT BOARD POSITION ON THE TTY.  ONE    *
;MUST BEWARE WHEN ONE USES BOUT, FOR IT DESTROYS REGISTERS  *
;U1, U2, AND U3 ON WEEKDAYS FROM 1 TO 4 PM.                 *
;************************************************************

BOUT:	MOVE	U2,SI		;GET MOVE INDEX
;	MOVEI	U1,[ASCIZ /	BOUT /]
;	PUSHJ	PDP,PRINT
	MOVEI	U2,1
	SKIPE	COLOR
	SETZ	U2,	;CKLY
	MOVE	U4,A		;GET ACTIVE PIECES
	JUMPN	U4,BOUT0
	MOVEI	U1,[ASCIZ /	A is zero in BOUT	/]
	PUSHJ	PDP,PRINT
	POPJ	PDP,

BOUT0:	MOVE	U5,K		;& KINGS
;	PUSHJ	PDP,TERPRI
;	MOVEI	U1,15
;	PUSHJ	PDP,MAGOUT
;	MOVEI	U1,12
;	PUSHJ	PDP,MAGOUT
	MOVEI	U3,1
	MOVEI	U1,"B"
	TRNN	U2,1		;BLACK TO PLAY?
	MOVEI	U1,"W"
	PUSHJ	PDP,MAGOUT	; CKLY
	MOVEI	U1," "
	PUSHJ	PDP,MAGOUT
	LSH	U4,1
	LSH	U5,1
BOUT1:	TLNN	U4,400000	;A PIECE THERE?
	AOJA	U3,.-3		;NO
	MOVE	U1,U3
	PUSHJ	PDP,INOUT	;YES, SO PRINT NUMBER
;	MOVEI	X1,"K"
;	TLNE	U5,400000	;IS PIECE A KING?
;	PUSHJ	PDP,TYO		;YES, SO PRINT "K"
	MOVEI	U1,"K"
	TLNE	U5,400000
	PUSHJ	PDP,MAGOUT
	LSH	U4,1
	LSH	U5,1		;SHIFT TO NEXT POSITION
	JUMPE	U4,BOUT2	;JUMP IF NO MORE PIECES
;	MOVEI	X1,","		;THERE ARE MORE PIECES
;	PUSHJ	PDP,TYO		;SO PRINT COMMA
	MOVEI	U1,54
	PUSHJ	PDP,MAGOUT
	AOJA	U3,BOUT1
BOUT2:	TLCE	U2,-1		;FIRST OR SECOND TIME HERE?
	JRST	BOUT3		;SECOND, SO EXIT
	MOVEI	U1," "
	PUSHJ	PDP,MAGOUT
	TRC	U2,1
	MOVE	U4,P
	JUMPN	U4,BOUT0
	MOVEI	U1,[ASCIZ /	P is zero in BOUT	/]
	PUSHJ	PDP,PRINT
	POPJ	PDP,

BOUT3:	
	MOVEI	U1,"	"
	PUSHJ	PDP,MAGOUT
	POPJ	PDP,


;This version condenses the board record  by using colons,
;for example, if there are pieces on squares 1,3,4,5,6,8
;then this would be reporte as 1,3:6,8 or maybe 1 3:6 8
;The initial position would accordingly be B 1:12 W 21:32

BORD:	MOVEI	U2,1
	SKIPE	COLOR
	SETZ	U2,	;CKLY
	MOVE	U4,A		;GET ACTIVE PIECES
	JUMPN	U4,BORD1
	MOVEI	U1,[ASCIZ /	A is zero in BORD	/]
	PUSHJ	PDP,PRINT
	POPJ	PDP,

BORD1:	MOVE	U5,K		;& KINGS
	MOVEI	U3,1
	MOVEI	U1,"B"
	TRNN	U2,1		;BLACK TO PLAY?
	MOVEI	U1,"W"
	PUSHJ	PDP,MAGOUT	; CKLY
	MOVEI	U1," "
	PUSHJ	PDP,MAGOUT
	SETZM	NPRINT		;So first number will print
	SETZM	NHOLD
	LSH	U4,1
	LSH	U5,1
BORD2:	TLNN	U4,400000	;A PIECE THERE?
	AOJA	U3,.-3		;NO
	PUSHJ	PDP,FIXNUM 	;Fix number, leaving it in X1
	MOVEM	X1,CURNUM	;Save for future use
	SKIPG	NPRINT		;Have we printed a number yet?
	JRST	PCURN		;No, so print this one
	SKIPG	Z,NHOLD		;Are we holding a number?
	JRST	NOTHLD		;Not held
	AOS	Z
	CAMN	Z,X1		;Is number out of sequence?
	TLNE	U5,400000	;Is current number a king?
	JRST	PHELD		;Yes, print held number and CURNUM
	MOVEM	X1,NHOLD	;Replace held number by new one
	JRST	NXTNUM		;and look for the next number

NOTHLD:	SKIPN	KPRINT		;Was last printed number a king
	TLNE	U5,400000	;Is current number a king?
	JRST	PSPACE		;Yes, so print COMMA and then number
	MOVE	Z,NPRINT	;get last printed number
	AOS	Z
	CAME	Z,X1		;Is the number in sequence?
	JRST	PSPACE		;No, so print COMMA then number
	MOVEM	X1,NHOLD	;Try holding this number
	JRST	NXTNUM		;and look for the next number

PHELD:	MOVEI	U1,":"		;COLON
	PUSHJ	PDP,MAGOUT
	MOVE	X1,NHOLD
	PUSHJ	PDP,MAGOU3	;Remember, kings are never held
	SETZM	NHOLD		;signal nothing held
PSPACE:	MOVEI	U1," "
	PUSHJ	PDP,MAGOUT
PCURN:	MOVE	X1,CURNUM
	PUSHJ	PDP,MAGOU3
	MOVE	X1,CURNUM
	MOVEM	X1,NPRINT	;Save for reference
	SETZM	NHOLD		;Signal nothing held
	SETZM	KPRINT		;It probably is not a king
	TLNN	U5,400000
	JRST	NXTNUM
	MOVEI	U1,"K"
	PUSHJ	PDP,MAGOUT
	SETOM	KPRINT		;Set king signal
NXTNUM:	LSH	U4,1
	LSH	U5,1		;SHIFT TO NEXT POSITION
	SKIPE	U4		;Are there any more pieces?
	AOJA	U3,BORD2	;Yes
	SKIPN	X1,NHOLD	;But is something held?
	JRST	BORD3
	MOVEI	U1,":"
	PUSHJ	PDP,MAGOUT
	MOVE	X1,NHOLD
	PUSHJ	PDP,MAGOU3
	SETZM	NHOLD
	SETZM	NPRINT		;So first number will print
BORD3:	TLCE	U2,-1		;FIRST OR SECOND TIME HERE?
	POPJ	PDP,
	MOVEI	U1," "
	PUSHJ	PDP,MAGOUT
	TRC	U2,1
	MOVE	U4,P
	JRST	BORD1

	
NPRINT:	0			;Last number printed
NHOLD:	0			;Number currently being held
KPRINT:	0			;0 if last print was not a king
CURNUM:	0			;The current number

FIXNUM:	MOVE	X1,U3
	CAIL	X1,↑D27
	SOS	X1
	CAIL	X1,↑D18
	SOS	X1
	CAIL	X1,↑D9
	SOS	X1
	POPJ	PDP,

;XEROX XEROX1 XEROX2 XER2A XEROX3 XEROX4 XEROX5 XEROX7 XEROX8 XEROXZ VARNUM XXIND XXVAL BTITLE SEETHE BLACK WHITE NOKING WITHKI BHEAD DSKIN5 FRMBU5 DSKER5 DATAG5 TERTXT MTEXT MTEXT1 MTEXT2 VAROUT

XEROX:
	MOVEI	U1,[ASCIZ / XEROX HERE /]
	PUSHJ	PDP,PRINT
	SETZB	Q,XXVAL
	SETZB	U2,XXIND
	PUSHJ	PDP,GETWHR	;Get the DIREC3 file ***not needed as in CKBZ
	RELEAS	5,
	PUSHJ	PDP,DSKIN5	;INIT BOARDS.DAT
	JRST	.+1
	MOVEI	U1,BTITLE
	PUSHJ	PDP,MTEXT
	PUSHJ	PDP,TERTXT
	PUSHJ	PDP,TERTXT
	MOVEI	U1,SEETHE
	PUSHJ	PDP,MTEXT
	PUSHJ	PDP,TERTXT
	PUSHJ	PDP,TERTXT
XEROX1:	MOVE	U3,INDEXX(Q)
	JUMPE	U3, XEROXZ	;All data processed
	MOVEI	U1,[ASCIZ / INPCNT=/]
	PUSHJ	PDP,PRINT
	MOVE	U1,INDEXC(Q)
;	ADDI	U1,2		;To read in guard words as well
;	MOVEM	U1,INPCNT
	PUSHJ	PDP,NUMOUT
	CAMN	U3,XXVAL
	JRST	XEROX4
	MOVEM	U3,XXVAL
	SETOM	COLOR		;Signals white to play
	CAIGE	U3,3
	JRST	XEROX2
	SETZM	COLOR		;signals black to play
	MOVEI	U1,BLACK
	SKIPA
XEROX2:	MOVEI	U1,WHITE
	PUSHJ	PDP,MTEXT
XER2A:	SETO	K,		;Use as flag for king boards
	TRNE	U3,1
	JRST	XEROX3
	SETZ	K,		;Set k to 0 if no kings
	MOVEI	U1,NOKING
	SKIPA
XEROX3:	MOVEI	U1,WITHKI
	PUSHJ	PDP,MTEXT
	PUSHJ	PDP,TERTXT
	PUSHJ	PDP,TERTXT
	MOVEI	U1,BHEAD
	PUSHJ	PDP,MTEXT
	PUSHJ	PDP,TERTXT
	PUSHJ	PDP,TERTXT
XEROX4:	MOVE	U3,INDEXF(Q)
	MOVEM	U3,FILEI2	;To be the new file name
	MOVEI	U1,U3
	PUSHJ	PDP,SIXOUT
	PUSHJ	PDP,GETFIL	;Read in currently needed BRxxxx file
	MOVE	U2,INDEXC(Q)	;To get INPCNT
	ADDI	U2,2		;To include the guard words
	MOVEM	U2,INPCNT
	SETZ	X5,		;Use to index through BRxxxx file
XEROX5:	MOVE	A,INPA(X5)	;Get the active pieces
	JUMPE	A,XEROX7	;This seems to be necessary
	MOVE	P,INPP(X5)
	SKIPE	K
	MOVE	K,INPK(X5)

	MOVE	U2,[POINT 7,INPM(X5)]
	ILDB	U1,U2
	PUSHJ	PDP,DNUM
	ILDB	U1,U2
;	CAIN	U1,140		;Trunk moves saved with 140
	JUMPN	U1,.+4
	MOVEI	U1,"T"		;Report "T" (in caps) for trunk
	PUSHJ	PDP,MAGOUT
	SKIPA
	PUSHJ	PDP,VAROUT
	ILDB	U1,U2
	PUSHJ	PDP,DNUM
	MOVEI	U1,11		;TAB
	PUSHJ	PDP,MAGOUT
	HRRZ	X1,INPM(X5)
	LSH	X1,-6
	ANDI	X1,77		;MAY BE FLAG BIT TO LEFT
	PUSHJ	PDP,MAGOU3
	MOVEI	U1,"-"
	PUSHJ	PDP,MAGOUT
	HRRZ	X1,INPM(X5)
	ANDI	X1,77
	PUSHJ	PDP,MAGOU3
	MOVEI	U1,11		;TAB
	PUSHJ	PDP,MAGOUT
	HRRZ	U1,INPM(X5)
	TRNN	U1,10000	;Is this a duplicate?
	PUSHJ	PDP,BORD	;No, so list board	WAS BOUT
	MOVEI	U1,15
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,12
	PUSHJ	PDP,MAGOUT
XEROX7:	ADDI	X5,3		;M28 FOR NEW INSERT WITH 3 AND 4 INSTEAD OF 4ND 5
	SKIPE	K
	AOS	X5
	CAMGE	X5,INPCNT
	JRST	XEROX5
XEROX8:	AOS	Q
	MOVEI	U1,14		;A form feed to page
	PUSHJ	PDP,MAGOUT
	JRST	XEROX1
XEROXZ:	RELEAS	5,
	RELEAS	4,
	JRST COMEND
	POPJ	PDP,

VARNUM:	Z			;Temp for variation numbers
	Z			;VARNUM guard



XXIND:	Z			;The last used INDEX table index
XXVAL:	Z			;The last used classification
BTITLE:	ASCIZ /			BOARD LISTINGS/
SEETHE:	ASCIZ /  (1T3 means first trunk, move 3; lower case letters refer to variations
	see Trunk and Variation listing for source information.)/
BLACK:	ASCIZ /	Black to Move/
WHITE:	ASCIZ /	White to Move/
NOKING:	ASCIZ /, on Boards with No Kings/
WITHKI:	ASCIZ /, on Boards with Kings/
BHEAD:	ASCIZ /Source	Move	Positions of Pieces on the Board/

DSKIN5:	INIT	5,0			;To write out final BOARDS file
	SIXBIT	/DSK/
	XWD	MGOBUF,0
	JRST	DSKER5
	SETZM	DATAG5+2
	MOVE	U1,[SIXBIT /  1ALS/]
	MOVEM	U1,DATAG5+3
	ENTER	5,DATAG5
	JRST	DSKER5
	OUTBUF	5,11
	AOS	(PDP)
	POPJ	PDP,

FRMBU5:	BLOCK	3

DSKER5:	MOVEI	U1,[ASCIZ /COULD NOT ENTER BOARDS/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	RELEAS	5,
	POPJ	PDP,

DATAG5:	SIXBIT	/BOARDS/
	SIXBIT	/DAT/
	Z
	Z
	Z

TERTXT:	MOVEI	U1,[BYTE (7) 15,12,0]	;CR-LF.
MTEXT:	HRLI	U1,(POINT 7,0)		;SET UP BYTE POINTER.
MTEXT1:	ILDB	U2,U1
	JUMPE	U2,MTEXT2		;RETURN ON FINAL ZERO.
	MOVEM	U1,U1SAVE#
	MOVE	U1,U2
	PUSHJ	PDP,MAGOUT		;MTEXTT CHARACTER.
	MOVE	U1,U1SAVE
	JRST	MTEXT1
MTEXT2:	POPJ	PDP,

VAROUT:	MOVEM	X2,X2SAV#
	IDIVI	U1,↑D26
	ADDI	U1,"a"
	PUSHJ	PDP,MAGOUT
	MOVE	U1,X2
	ADDI	U1,"a"
	PUSHJ	PDP,MAGOUT
	MOVE	X2,X2SAV
	POPJ	PDP,
;BDOUT AGAIN AGAIN1 BDOUT1 BDOUT2 CRLFCK PPLUS BORDER PSTAR PHYFEN PBM PBK PWM PWK

;************************************************************
;BDOUT WILL PRINT OUT THE CURRENT BOARD IN PICTURE FORMAT.  *
;BDOUT USES REGISTERS A, P, K, U1, U2, U4, U5, X3, AND X4.  *
;REGISTERS A, P, AND K ARE NOT DESTROYED BY BDOUT           *
;************************************************************

BDOUT:;	MOVE	A,OA
;	MOVE	P,OP
;	MOVE	K,OK
	PUSHJ	PDP,TERPRI
	SETZB	X4,U2
	SETZM	X3

	MOVE	U4,A
	MOVE	U5,P
	AND	U4,K		;ACTIVE KINGS
	AND	U5,K		;PASSIVE KINGS
;\|\\M1SAIL25;\M2CHK.FNT[3,ALS];\F1
	PUSHJ	PDP,BORDER
	MOVEI	U1,"\"			;CALL CHK FONT
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,"F"
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,"2"
	PUSHJ	PDP,MAGOUT
 	MOVEI	U1,"H"		;UPPER LEFT CORNER
	PUSHJ	PDP,MAGOUT
	PUSHJ	PDP,TBORDE
	MOVEI	U1,"X"		;UPPER RIGHT CORNER
	PUSHJ	PDP,MAGOUT
	PUSHJ	PDP,TERPRI
	MOVEI	U1,15
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,12
	PUSHJ	PDP,MAGOUT
	PUSHJ	PDP,PSTAR
	PUSHJ	PDP,PLEFT
AGAIN:	PUSHJ	PDP,PPLUS	;PRINT + SIGN
	TRNN	U2,7
	JRST	CRLFCK
AGAIN1:	ROT	A,1
	ROT	U4,1
	ROT	P,1
	ROT	U5,1
	TLNN	U4,400000	;BK?
	JRST	.+6
	SKIPE	COLOR
	PUSHJ	PDP,PWK
	SKIPN	COLOR
	PUSHJ	PDP,PBK
	JRST	BDOUT1
	TLNN	A,400000	;BM?
	JRST	.+6		;NO
	SKIPE	COLOR
	PUSHJ	PDP,PWM
	SKIPN	COLOR
	PUSHJ	PDP,PBM
	JRST	BDOUT1
	TLNN	U5,400000	;WK?
	JRST	.+6		;NO
	SKIPE	COLOR
	PUSHJ	PDP,PBK
	SKIPN	COLOR
	PUSHJ	PDP,PWK
	JRST	BDOUT1
	TLNN	P,400000	;WM?
	JRST	.+6		;NO
	SKIPE	COLOR
	PUSHJ	PDP,PBM
	SKIPN	COLOR
	PUSHJ	PDP,PWM
	JRST	BDOUT1
	PUSHJ	PDP,PHYFEN	;EMPTY SQUARE
BDOUT1:	AOS	X4
	CAIN	X4,↑D8		;SHIFT OVER BITS 9, 18, 27
	JRST	BDOUT2
	CAIN	X4,↑D17
	JRST	BDOUT2
	CAIE	X4,↑D26
	JRST	CRLFCK
BDOUT2:	ROT	A,1
	ROT	U4,1
	ROT	P,1
	ROT	U5,1
	AOS	X4
CRLFCK:	TRNE	U2,7		;DO WE WANT A CR-LF?
	JRST	AGAIN		;NO
	PUSHJ	PDP,PSTAR
	PUSHJ	PDP,PRIGHT
	PUSHJ	PDP,TERPRI
	MOVEI	U1,15
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,12
	PUSHJ	PDP,MAGOUT
	SETCMM	X3
	JUMPGE	X3,.+4
	PUSHJ	PDP,PSTAR
	PUSHJ	PDP,PLEFT
	JRST	AGAIN1
	CAIE	U2,↑D64
	JRST	AGAIN-2
	PUSHJ	PDP,BORDER
	MOVEI	U1,"W"		;BOTTOM LEFT CORNER
	PUSHJ	PDP,MAGOUT
	PUSHJ	PDP,BBORDE	;BOTTOM BORDER
	MOVEI	U1,"G"		;BOTTOM RIGHT CORNER
	PUSHJ	PDP,MAGOUT
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,TERPRI
	MOVEI	U1,15
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,12
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,"β"
	SKIPE	COLOR
	MOVEI	U1,"α"
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,"π"
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,15
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,12
	PUSHJ	PDP,MAGOUT
	ROT	A,1
	ROT	P,1
	MOVEI	U1,"\"			;RESTORE TEXT FONT
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,"F"
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,"1"
	PUSHJ	PDP,MAGOUT
	POPJ	PDP,

PPLUS:	MOVEI	U1,[ASCIZ /+ /]
	PUSHJ	PDP,PRINT
	MOVEI	U1," "			;NON-PLAYING SQUARE
	PUSHJ	PDP,MAGOUT
	AOS	U2
	POPJ	PDP,

BORDER: MOVEI	U1,[ASCIZ /* * * * * * * * * */]
	PUSHJ	PDP,PRINT	
	POPJ	PDP,

TBORDE:	MOVEI	U1,"T"		;TOP LINE
	SKIPA
BBORDE:	MOVEI	U1,"U"		;BOTTOM LINE
	MOVEI	X2,10
	PUSHJ	PDP,MAGOUT
	SOJG	X2,.-1
	POPJ	PDP,

PSTAR:	MOVEI	U1,[ASCIZ /* /]
	PUSHJ	PDP,PRINT
	POPJ	PDP,

PLEFT:	MOVEI	U1,"V"
	SKIPA
PRIGHT:	MOVEI	U1,"F"
	PUSHJ	PDP,MAGOUT
	POPJ	PDP,

PHYFEN:	MOVEI	U1,[ASCIZ /  /]
	PUSHJ	PDP,PRINT
	MOVEI	U1,"Z"		;EMPTY PLAYING SQUARE
	PUSHJ	PDP,MAGOUT
	AOS	U2
	POPJ	PDP,

PBM:	MOVEI	U1,[ASCIZ /B /]
	SKIPN	SIDE
	MOVEI	U1,[ASCIZ /W /]		
	PUSHJ	PDP,PRINT
	MOVEI	U1,"d"		;black man
	PUSHJ	PDP,MAGOUT
	AOS	U2
	POPJ	PDP,

PBK:	MOVEI	U1,[ASCIZ /BK/]
	SKIPN	SIDE
	MOVEI	U1,[ASCIZ /WK/]
	PUSHJ	PDP,PRINT
	MOVEI	U1,"c"		;black king
	PUSHJ	PDP,MAGOUT
	AOS	U2
	POPJ	PDP,

PWM:	MOVEI	U1,[ASCIZ /W /]
	SKIPN	SIDE
	MOVEI	U1,[ASCIZ /B /]
	PUSHJ	PDP,PRINT
	MOVEI	U1,"D"		;WHITE MAN
	PUSHJ	PDP,MAGOUT
	AOS	U2
	POPJ	PDP,

PWK:	MOVEI	U1,[ASCIZ /WK/]
	SKIPN	SIDE
	MOVEI	U1,[ASCIZ /BK/]
	PUSHJ	PDP,PRINT
	MOVEI	U1,"C"		;WHITE KING
	PUSHJ	PDP,MAGOUT
	AOS	U2
	POPJ	PDP,

LEGALY:	;SETZM	MJW(X3)		;MUST ZERO SINCE BITS MAY BE LEFT FROM BACK UP
	AOS	(PDP)
	SETOM	OJ
	SETZB	U3,U4
	SETZB	U5,Q
	MOVE	U1,A
	MOVE	U2,K
	AND	U2,U1		;ACTIVE KINGS
	MOVE	Z,U1
	IOR	Z,P
	XOR	Z,GUARD		;EMPTY SQUARES
	MOVE	X5,COLOR
	XOR	X5,X3
	ANDI	X5,1		;NEEDED LATER
	TRNE	X5,1
	EXCH	U1,U2
	JUMPE	U1,LEG1
	MOVE	U3,Z
	LSH	U3,4
	AND	U3,P
	LSH	U3,4
	AND	U3,U1
LEG1:	MOVEM	U3,PLRF(X3)
	JUMPE	U1,LEG2
	MOVE	U4,Z
	LSH	U4,5
	AND	U4,P
	LSH	U4,5
	AND	U4,U1
LEG2:	MOVEM	U4,PLLF(X3)
	JUMPE	U2,LEG3
	MOVE	U5,Z
	LSH	U5,-4
	AND	U5,P
	LSH	U5,-4
	AND	U5,U2
LEG3:	MOVEM	U5,PLLB(X3)
	JUMPE	U2,LEG4
	MOVE	Q,Z
	LSH	Q,-5
	AND	Q,P
	LSH	Q,-5
	AND	Q,U2
LEG4:	MOVEM	Q,PLRB(X3)
	SKIPE	Q		;ARE THERE ANY JUMPS
	POPJ	PDP,		;JUMP RETURN
	SKIPE	U5
	POPJ	PDP,
	SKIPE	U4
	POPJ	PDP,
	SKIPE	U3
	POPJ	PDP,
	AOS	(PDP)
	SETZM	OJ
	JUMPE	U1,LEG5
	MOVE	U3,Z
	LSH	U3,4
	AND	U3,U1
	MOVEM	U3,PLRF(X3)
	MOVE	U4,Z
	LSH	U4,5
	AND	U4,U1
	MOVEM	U4,PLLF(X3)
LEG5:	JUMPE	U2,LEG6
	MOVE	U5,Z
	LSH	U5,-4
	AND	U5,U2
	MOVEM	U5,PLLB(X3)
	MOVE	Q,Z
	LSH	Q,-5
	AND	Q,U2
	MOVEM	Q,PLRB(X3)
LEG6:	SKIPE	Q
	POPJ	PDP,
	SKIPE	U5
	POPJ	PDP,
	SKIPE	U4
	POPJ	PDP,
	SKIPE	U3
	POPJ	PDP,
	SOS	(PDP)
	SOS	(PDP)
	POPJ	PDP,		;NO MOVE RETURN
GUARD:	377377377377
	END